2010-05-04 4 views
0

Я подумываю о преобразовании нескольких пользовательских элементов управления для использования шаблонов. Одним из них является мой собственный UC, который содержит некоторые элементы управления, один из которых является ретранслятором. Можно ли указать шаблон для второго уровня usercontrol из шаблона для первого (который будет на странице)?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

0

Я не уверен, что я понимаю ваш вопрос, но я много использую многоуровневые повторители с динамическими шаблонами. Я использую UserControls без кода в качестве удобного места для размещения шаблона html.

В коде позади (например, как событие ItemDataBound от родительского ретранслятора), я выбираю соответствующий шаблон и установить его:

repeater.ItemTemplate = MyBase.LoadTemplate(templateControlName) 
repeater.DataSource = dataSource 
repeater.DataBind() 
Смежные вопросы