带有子控件的UserControl传入UserControl中的Repeater

时间:2009-10-16 13:12:22

标签: c# asp.net user-controls repeater

我正在努力实现某些方面......

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之后呈现,而不是在转发器中呈现。

任何人都可以指出我可能出错的地方和/或指出我的方向更好吗?

1 个答案:

答案 0 :(得分:4)

你已经得到了解析并且持续错误的方式。

你想要

[ParseChildren(true)]
[PersistChildren(false)]