3

私のコンテンツページは次のようになります。

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Basket.aspx.cs" Inherits="Basket" Title="Untitled Page" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
</asp:Content>

ここで、ページの読み込み時にいくつかのコントロールをコンテンツに動的に追加したいので、次のコードを試しています:

  protected void Page_Load(object sender, EventArgs e)
  {
     Content2. // I want to add controls to it dynamically
  }

問題はContent2、コンパイラがコントロールを認識できず、ディレクティブまたはアセンブリ参照が見つからないというエラーが発生することです。

解決策はありますか?

4

2 に答える 2

8

そのコントロールへの参照を取得できない理由はasp:Content、ページがマスターページと結合されたときにコントロールが保持されないためです。基本的に、ASPはこれらのasp:Contentセクション内からすべてのコントロールをContentPlaceholder取得し、マスターページ内のコントロールの子にします。

MSDNが言うように:コンテンツコントロールは実行時にコントロール階層に追加されません。代わりに、Contentコントロール内のコンテンツは、対応するContentPlaceHolderコントロールに直接マージされます。

つまり、そのセクションにコントロールを追加する場合は、マスターページContentPlaceholderでコントロールへの参照を取得して追加する必要があります。何かのようなもの:

ContentPlaceHolder myContent = (ContentPlaceHolder)this.Master.FindControl("ContentPlaceHolder1");
myContent.Controls.Add(??);

セクションのContentPlaceHolderID値ではなく、値を使用していることに注意してください。IDasp:Content

于 2010-11-10T10:04:05.637 に答える
2

コンテンツにプレースホルダー コントロールを配置し、それを使用してコントロールを追加することをお勧めします。例えば、

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Basket.aspx.cs" Inherits="Basket" Title="Untitled Page" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
  <asp:Placeholder runat="server" ID="Content1Controls" />
</asp:Content>

..

  protected void Page_Load(object sender, EventArgs e)
  {
     Content1Controls.Controls.Add(...
  }
于 2010-11-10T09:10:48.680 に答える