我正在考虑将一些用户控件转换为使用模板。其中之一是我自己的 UC,其中包含一些控件,其中一个是中继器。是否可以从第一个模板(将在页面上)中为第二级用户控件指定一个模板?
问问题
1034 次
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 回答