0

我正在考虑将一些用户控件转换为使用模板。其中之一是我自己的 UC,其中包含一些控件,其中一个是中继器。是否可以从第一个模板(将在页面上)中为第二级用户控件指定一个模板?

4

2 回答 2

1

假设我正确理解了您的问题,请尝试以下操作:

页面.aspx:

<%@ Page Language="C#" %>
<%@ Register src="UC.ascx" tagname="UC" tagprefix="uc1" %>

<uc1:UC ID="UC1" runat="server">
<RepeaterTemplate>
    <%# Eval("Name") %> <%# Eval("Age") %><br />
</RepeaterTemplate>
</uc1:UC>

UC.ascx:

<%@ Control Language="C#" ClassName="UC" %>

<script runat="server">
    class Person {
        public string Name { get; set; }
        public int Age { get; set; }
    }

    protected void Page_Load(object sender, EventArgs e) {
        repeater1.ItemTemplate = RepeaterTemplate;
        repeater1.DataSource = new Person[] {
            new Person { Name="Joe", Age=20},
            new Person { Name="Jack", Age=30},
        };
        repeater1.DataBind();
    }

    public ITemplate RepeaterTemplate { get; set; }
</script>

<asp:Repeater runat="server" ID="repeater1">
</asp:Repeater>

这基本上将外部页面上指定的模板传递给用户控件中的转发器。

它可能不完全是你的场景,但希望这会给你一些想法。

于 2010-05-08T16:23:12.463 回答
0

我不确定我是否理解您的问题,但我使用动态模板做了很多多级中继器。我使用没有代码的 UserControls 作为放置模板 html 的方便位置。

在后面的代码中(例如来自父转发器的 ItemDataBound 事件),我选择适当的模板并设置它:

repeater.ItemTemplate = MyBase.LoadTemplate(templateControlName)
repeater.DataSource = dataSource
repeater.DataBind()
于 2010-05-10T16:26:10.490 回答