2012-05-07 8 views
6

私はマスターページを持ち、私のすべてのページはそれを継承しています。 書式設定のために、私はContentPlaceHolderのページとは異なるコンテンツを配置することを考えました。programPlaceHolderにプログラムを追加する方法は?

ここにすべてを挿入できますか?私はContentPlaceHolderにデータベースからのものを取り込むことを計画しているので、私はそれをプログラム的に行う必要があると思います。

  1. コントロールをContentPlace Holderに追加するにはどうすればよいですか? answersを確認しましたが、IDでアクセスできません。

  2. 先頭から複数のContentPlaceHoldersを使用する必要がありますか?映画を撮りたいとしましょう。すべての画像と説明と評価で1つだけあれば、それぞれのContentPlaceHolderは1つだけですか?

私はASPでの経験がないので、他のソリューションにも公開されています。通常、何が起こる

答えて

2

あなたが適切なHTMLを使用して、マスターページを設定
  1. し、そのマスターページオフに基づいてページを作成ContentPlaceHolder
  2. です。 Visual Studioを使用して、既存のマスターページに基づいて新しいページを作成するよう指示すると、Contentエリアが追加されます。
  3. 新しく作成したページのコンテンツ領域に物を追加します。

コントロールをマスター(または任意の)ページに動的に追加する場合は、既存のコントロールにコントロールを追加できます。どのような方法でもラップする必要がない場合は、Placeholder(asp.netコントロール)を追加してください。

+0

申し訳ありませんが、実際には私の問題は解決しません。 WebページのCodeBehindからアクセスできないため、コンテンツ領域にプログラム的にテキストを挿入するためのコードが必要です。 私はdefault.aspxページとID = content1のContentPlaceHolderを持っています。 default.aspx.csではcontent1を見ることができません。 –

+0

私は参照してください。あなたのページの 'Content'エリアにプレースホルダを置くことができない理由はありますか?あなたは確かにそれに事を追加することができます: – JayC

+0

例: 'Label lbl = new Label(); lbl.Text = "何か"; placeHolder.Controls.Add(lbl); ' – JayC

1

私はこの

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> 
<asp:Literal ID="jsstuff" runat="server"></asp:Literal> 
</asp:Content> 

のように行なったし、これは、背後にあるコードに入った:

string stuff = @"<script type=""text/javascript""> 
             var searchBox = 0; 
             var currentCountry = ''; 
             </script>"; 
        jsstuff.Text = stuff; 
10

古い質問...しかし、私はこの問題に走ったし、これは保た#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を包むかつてので、私の定期的なユーザーコントロールは、カスタムユーザーコントロールから継承する必要があり、カスタムユーザーコントロールを取ります残りの部分を気にして、私はユーザーコントロールのコードの中で何もする必要はありません。

+0

これはすごくうまくいきます。プレースホルダ名の制御パラメータを含むように拡張することさえできます。私はこのソリューションを、プログラムでJavaScriptのファイルを特定のシーケンス/位置に配置する必要があるときに使用し、ヘッダーには配置しませんでした。 – secretwep

0

コンテンツページとマスターページの名前空間が同じでない場合、コンテンツページのCodebehindでコンテンツページコントロールにアクセスできません。

また、デザイナーファイルを確認してください。デザイナーファイルにリストされていないコントロールがファイルを削除して再作成すると(プロジェクト - > Webアプリケーションに変換する)

関連する問題