我正在努力实现某些方面......
UserControl(MyRepeater)
<p>Control Start</p>
<asp:Repeater id="myRepeater" runat="server" />
<p>Control End</p>
页
<p>Page Start</p>
<uc1:MyRepeater ID="MyRepeater1" runat="server">
<ItemTemplate>
<p>Page Item Template</p>
</ItemTemplate>
</uc1:MyRepeater>
<p>Page End</p>
Page对象中的ItemTemplate将用作UserControl中Repeater的ItemTemplate。
原因是我们在整个应用程序中使用了多个中继器,每个中继器和一些相应的按钮执行一些类似的代码。我想将这些代码保存在一个地方,以便开发人员可以使用我们的自定义Repeater控件,而不必在每次需要时在每个页面中创建代码。
我在过去通过在我的Repeater控件的RenderContents方法中创建一个Repeater控件,使用WebControl做了类似的事情。一切都按照我的预期工作。
我想使用UserControl的原因是因为系统之间可能需要进行许多样式/布局类型更改,这将更容易作为可以直接编辑html / asp的UserControl
目前我的UserControl背后的代码是这样的。
[ParseChildren(false)]
[PersistChildren(true)]
public partial class MyRepeater : System.Web.UI.UserControl, INamingContainer
{
protected void Page_Init(object sender, EventArgs e)
{
myRepeater.ItemTemplate = this.ItemTemplate;
}
protected void Page_Load(object sender, EventArgs e)
{
//Temporary bind for testing
myRepeater.DataSource = Enumerable.Range(1, 5);
myRepeater.DataBind();
}
[DefaultValue("")]
[Browsable(false)]
[PersistenceMode(PersistenceMode.InnerProperty)]
[TemplateContainer(typeof(RepeaterItem))]
public virtual ITemplate ItemTemplate { get; set; }
}
简而言之,它只是不起作用...... Page ItemTemplate的内容在整个UserControl之后呈现,而不是在转发器中呈现。
任何人都可以指出我可能出错的地方和/或指出我的方向更好吗?
答案 0 :(得分:4)
你已经得到了解析并且持续错误的方式。
你想要
[ParseChildren(true)]
[PersistChildren(false)]