古い質問...しかし、私はこの問題に走ったし、これは保た#1のポストでしたGoogle上に登場しているので、他の人が私の場合にはうまくいかなかったので、私は自分の答えを追加したいと思う。 (通常の使用では、回答@JayCは、あなたがそれを行う方法であるが)ここで
は、通常の<asp:Content
が動作しないとき、私はそれをやった方法です:
マスターページには、このContentPlaceHolder
があります
<asp:ContentPlaceHolder ID="ScriptsPlace" runat="server"></asp:ContentPlaceHolder>
ユーザコントロールからJavaScriptを動的に追加しなければならない。 ContentPlaceHolder
を使用しようとすると、直接、このエラーを与える:
Parser Error Message: Content controls have to be top-level controls in a content page or a nested master page that references a master page.
だから私はコードビハインドからスクリプトを追加したいです。
protected void Page_Load(object sender, EventArgs e)
{
ContentPlaceHolder c = Page.Master.FindControl("ScriptsPlace") as ContentPlaceHolder;
if (c != null)
{
LiteralControl l = new LiteralControl();
l.Text="<script type=\"text/javascript\">$(document).ready(function() {js stuff;});</script>";
c.Controls.Add(l);
}
}
UPDATE:ここ.ascx
ファイルのページの読み込みがあるだから、私は私が予想よりもより多くの場所でこれを使用していた、とはるかに柔軟/読みだった方法を使用して終了判明します。ユーザーコントロール自体で、私はちょうど通常のdiv
で移動する必要があるjavascriptと何かを包んだ。
<div id="_jsDiv" runat="server">
$(document).ready(function() {
//js stuff
});
Other server controls or HTML junk
</div>
そして背後にあるコードは、そのdiv要素を見つけ、その後、ContentPlaceHolder
に移動します。
protected void Page_Load(object sender, EventArgs e)
{
ContentPlaceHolder c = Page.Master.FindControl("ScriptsPlace") as ContentPlaceHolder;
HtmlGenericCOntrol jsDiv = this.FindControl("_jsDiv") as HtmlGenericControl;
if (c != null && jsDiv != null)
{
c.Controls.Add(jsDiv);
}
}
私は実際にカスタムユーザーコントロールにこのコードを入れて、私はちょうど私が<div id="_jsDiv" runat="server">
での/ etc JavaScriptを包むかつてので、私の定期的なユーザーコントロールは、カスタムユーザーコントロールから継承する必要があり、カスタムユーザーコントロールを取ります残りの部分を気にして、私はユーザーコントロールのコードの中で何もする必要はありません。
申し訳ありませんが、実際には私の問題は解決しません。 WebページのCodeBehindからアクセスできないため、コンテンツ領域にプログラム的にテキストを挿入するためのコードが必要です。 私はdefault.aspxページとID = content1のContentPlaceHolderを持っています。 default.aspx.csではcontent1を見ることができません。 –
私は参照してください。あなたのページの 'Content'エリアにプレースホルダを置くことができない理由はありますか?あなたは確かにそれに事を追加することができます: – JayC
例: 'Label lbl = new Label(); lbl.Text = "何か"; placeHolder.Controls.Add(lbl); ' – JayC