ネストされた階層を表すクラス(MyClass)があるため、クラスにはMyClassのコレクションであるプロパティがあります。 MyClassにもタイトルプロパティがありますユーザーコントロールをリピータに動的に追加する
Webページに表示するには、リピーターを持つユーザーコントロールを作成したいと考えていました。アイテムテンプレートでは、タイトルプロパティを表示するリテラルがあり、リピーターのItemCreatedイベントには、私はusercontrolの新しいインスタンスを作成し、それをリピーターの現在のアイテムに追加します。
私の問題は、UserControlのPage_Loadイベントが発生したときに、コントロールが動的に追加された場合、EnsureChildControlsを呼び出してもrepMyClassリピータporopertyがnullになります。私はここに何かを逃していますか私がリピータを作成し、私のuserctonrolをアイテムテンプレートにドロップするとうまく動作します。私はこれを動的に動かすことができないのですか?
ユーザーコントロール:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MyControl.ascx.cs" Inherits="MyControl" %>
Items:<br/>
<asp:Repeater ID="repMyClass" runat="server" EnableViewState="false"
OnItemCreated="repMenuItems_ItemCreated">
<HeaderTemplate><ul><HeaderTemplate>
<ItemTemplate>
<li><%# Eval("Title") %>
<div><asp:PlaceHolder ID="SubItemPlaceholder" runat="server" /></div>
</li></ItemTemplate>
<FooterTemplate></ul></FooterTemplate>
</asp:Repeater>
ユーザーコントロールコード:あなたがしたいとロードイベントでそれを使用するプロパティを取るコントロール内の別のコンストラクタを行い、その後、渡すことができ
public partial class MyControl: System.Web.UI.UserControl
{
public IEnumerable<MyClass> ChildItems { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
this.repMyClass.DataSource = ChildItems;
this.repMyClass.DataBind();
}
protected void repMenuItems_ItemCreated(object Sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
//Get the MyClass instance for this repeater item
MyClass mcCurrent = (MyClass)e.Item.DataItem;
//If the MyClass instance has child instances
if (mcCurrent.Children != null && mcCurrent.Children.Length > 0)
{
//Add a new user control and set it's property so it can bind
PlaceHolder ph = (PlaceHolder)e.Item.FindControl("SubItemPlaceholder");
MyControl ctl = (MyControl)Page.LoadControl(typeof(MyControl),new object[] {});
ctl.ChildItems = mcCurrent.Children;
ph.Controls.Add(ctl);
}
}
}
}
これを説明するために編集できますか、これをクリーンアップすることはできますか?私は、この文章の半分の編集が完了していないかもしれないと思いますか? "私の問題は、動的に追加されたコントロールのPage_Loadイベントが最初に発生したときに、repNyClassリピータのporopertyがヌルです" – chrismay