ASP.NET - вложенные пользовательские шаблоны - PullRequest
0 голосов
/ 04 мая 2010

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

Ответы [ 2 ]

1 голос
/ 08 мая 2010

Если я правильно понял ваш вопрос, попробуйте что-то вроде этого:

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 голосов
/ 10 мая 2010

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

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

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