2010-05-04 101 views
0

我想轉換幾個用戶控件來使用模板。其中之一是我自己的統一通信,其中包含一些控制,其中一個是中繼器。是否有可能從模板爲第一級(這將在頁面上)指定第二級用戶控件的模板?ASP.NET - 嵌套自定義模板

回答

1

假設我正確地理解你的問題,嘗試這樣的事情:

Page.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> 

這主要通過在指定的模板外部頁面轉發到用戶控件中的中繼器。

它可能不完全是你的情況,但希望這會給你的想法。

+0

看起來這可能是工作。直到國家的最後期限關閉之前,我會暫緩打標。謝謝。 :) – Echilon 2010-05-10 19:36:50

0

我不知道我理解你的問題,但我做了很多具有動態模板的多級中繼器。我使用無代碼的UserControls作爲放置模板html的方便之處。

在後面的代碼(如從父中繼器ItemDataBound事件),我選擇合適的模板,並將其設置:

repeater.ItemTemplate = MyBase.LoadTemplate(templateControlName) 
repeater.DataSource = dataSource 
repeater.DataBind()