我正在尝试实现类似以下内容的功能...
用户控件(MyRepeater)
简而言之,它只是不起作用...页面ItemTemplate的内容在整个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>
使用页面对象的ItemTemplate作为UserControl中Repeater的ItemTemplate。
这样做的原因是我们的应用程序中使用了许多Repeater,每个Repeater和一些相关按钮执行类似的代码。我希望将所有代码都放在一个地方,让开发人员可以使用我们的自定义Repeater控件,而不必每次都在每个页面创建代码。
我以前在WebControl中使用RenderContents方法创建Repeater控件时也做过类似的事情,并且一切都按照我的期望工作。
我想要使用UserControl的原因是,在不同系统之间可能需要进行许多样式/布局类型的更改,这将更容易通过直接编辑UserControl的html/asp实现。
目前,我的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; }
}
简而言之,它只是不起作用...页面ItemTemplate的内容在整个UserControl之后渲染,而不是在重复器内部。
有人可以指出我可能错了的地方和/或指引我更好的方向吗?