【问题标题】:ASP.NET - Nested Custom TemplatesASP.NET - 嵌套自定义模板
【发布时间】:2010-05-04 14:24:38
【问题描述】:

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

【问题讨论】:

    标签: asp.net templates user-controls itemplate


    【解决方案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>
    

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

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

    【讨论】:

    • 看起来这可行。我会推迟标记作为答案,直到赏金截止日期结束。谢谢。 :)
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      相关资源
      最近更新 更多