【问题标题】:Web Control PropertiesWeb 控件属性
【发布时间】:2008-09-15 04:38:47
【问题描述】:

我想让我的 web 控件在设计模式下更具可读性,基本上我希望标签声明看起来像:

<cc1:Ctrl ID="Value1" runat="server">        
     <Values>string value 1</Value>
     <Values>string value 2</Value>
</cc1:Ctrl>

假设我在后面的代码中有一个私有变量:

List<string> values = new List<string>();

那么如何让我的用户控件使用标记中声明的值填充私有变量?


对不起,我应该更明确一点。基本上我喜欢 ITemplate 提供的功能 (http://msdn.microsoft.com/en-us/library/aa719834.aspx)

但在这种情况下,您需要在运行时知道可以实例化多少模板,即

void Page_Init() {
if (messageTemplate != null) {
    for (int i=0; i<5; i++) {
        MessageContainer container = new MessageContainer(i);
        messageTemplate.InstantiateIn(container);
        msgholder.Controls.Add(container);
    }
}

}

在给定的示例中,标记如下所示:

<acme:test runat=server>
   <MessageTemplate>
    Hello #<%# Container.Index %>.<br>
   </MessageTemplate>
</acme:test>

它既漂亮又干净,它没有任何标签前缀等。我真的想要漂亮干净的标签。

我希望标记是干净的可能是愚蠢的,我只是想知道我是否缺少一些简单的东西。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    我认为您要搜索的是属性:

    [PersistenceMode(PersistenceMode.InnerProperty)]
    

    Persistence Mode

    请记住,您必须使用以下名称注册命名空间和前缀:

    <%@ Register Namespace="MyNamespace" TagPrefix="Pref" %>
    

    【讨论】:

      【解决方案2】:

      我看到两个选项,但都取决于您的 Web 控件为您的值实现某种集合。第一个选项是只使用控件的集合而不是您的私有变量。另一种选择是在运行时将控件的集合复制到您的私有变量中(例如,可能在 Page_Load 事件处理程序中)。

      假设您有实现项目集合的 Web 控件,例如列表框。标签在源代码视图中如下所示:

          <asp:ListBox ID="ListBox1" runat="server">
              <asp:ListItem>String 1</asp:ListItem>
              <asp:ListItem>String 2</asp:ListItem>
              <asp:ListItem>String 3</asp:ListItem>
          </asp:ListBox><br />
      

      然后你可以使用这样的代码来加载你的私有变量:

              List<String> values = new List<String>();
      
              foreach (ListItem item in ListBox1.Items)
              {
                  values.Add(item.Value.ToString());
              }
      

      如果您在 Page_Load 中执行此操作,您可能只想在初始加载时执行(即不在回发时)。另一方面,根据您的使用方式,您可以只使用 ListBox1.Items 集合,而不是声明和初始化 values 变量。

      我想不出以声明方式执行此操作的方法(因为无论如何您的列表直到运行时才会被实例化)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-07
        • 1970-01-01
        • 2012-03-21
        • 1970-01-01
        • 2010-12-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多