【问题标题】:Assinging non-primitive values to user control properties?将非原始值分配给用户控件属性?
【发布时间】:2011-02-02 10:00:23
【问题描述】:

我已经构建了一个具有公共属性string[] foo 的用户控件。

是否可以在实际标记中指定它?

项目类型为 ASP.NET webforms / web application。

我尝试了以下语法,但它不起作用:(它编译但从未分配值)。

<abc:MyControl runat="server" foo='<%# new string[]{"Hello"} %>' />

【问题讨论】:

    标签: c# asp.net user-controls webforms


    【解决方案1】:

    您可能会对PersistenceMode(PersistenceMode.InnerProperty) 感兴趣。 PersistenceMode 属性允许您创建具有嵌套属性的属性。请注意,在这种情况下,您的 aspx 代码将使用嵌套元素而不是属性,因为元素只能存储字符串。

    在这种情况下,您将执行以下操作:

    <abc:MyControl runat="server" >
        <foo>
            <element value="1" />
            <element value="2" />
        </foo>
    </abc:MyControl>
    

    【讨论】:

      【解决方案2】:

      数据绑定语法只是一种简写形式。

      <abc:MyControl runat="server" ID="control1" foo='<%# new string[]{"Hello"} %>' />
      

      的简写
      <abc:MyControl runat="server" ID="control1" OnDatabinding="Databind_control1" />
      
      
      protected void Databind_control1(object sender, EventArgs e)
      {
          ((MyControl) sender).foo = new string[]{"Hello"};
      }
      

      试试这个方法,看看它是否有效。

      【讨论】:

      • 有趣。我没查过,但是我假设只有在控件实现了某个接口之后才调用DataBinding事件?
      • @maxp: 所有控件都有一个 DataBinding 事件。
      【解决方案3】:

      我以前从未见过这样的事情,通常对于数组我会这样做:

      <abc:MyControl runat="server" foo="This,Is,A,Test" />
      
      public string foo {
          get;
          set;
      }
      
      public string[] foos {
          get { return foo.Split(','); }
          //set; if needed
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-28
        • 1970-01-01
        • 1970-01-01
        • 2010-12-01
        • 1970-01-01
        • 2014-12-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多