【问题标题】:How to give a custom ASP.NET control the ability to parse XML markup to a collection?如何赋予自定义 ASP.NET 控件将 XML 标记解析为集合的能力?
【发布时间】:2011-02-03 08:24:24
【问题描述】:

我正在编写一个自定义的 ASP.NET web 控件,并希望它有一个自定义项的集合,这些项也可以在 XML 标记中指定。像这样的:

class MyControl: WebControl
{
    public IList<MyItemType> MyItems { get; private set; }
}

在标记中:

<asd:MyControl runat="server" id="mc1">
    <MyItems>
        <MyDerivedCustomItem asd="dsa"/>
        <MyOtherDerivedCustomItem asd="dsa"/>
    </MyItems>
</asd:MyControl>

我该怎么做?我虽然这都是关于在集合上实现一些接口或向属性添加一些特殊属性,但我所做的一切似乎都不起作用。

【问题讨论】:

    标签: c# asp.net collections custom-controls designer


    【解决方案1】:

    哈,明白了!

    似乎IList&lt;T&gt; 是一个不好的返回类型。它必须是实现普通旧IList 的东西。虽然实现可以是显式的。提供具有相同名称但强类型参数的方法覆盖将限制标记编辑器中的可用选项。

    当然,添加标准属性似乎也是必要的:

    [PersistenceMode(PersistenceMode.InnerProperty)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    [MergableProperty(false)]
    

    不确定他们都做了什么(文档在很多地方都没有描述性),但它确实有效!

    【讨论】:

      【解决方案2】:

      也许这篇 MSDN 文章会给你一个先机:http://msdn.microsoft.com/en-us/library/9txe1d4x.aspx

      要查看的重要属性之一是:
      [PersistenceMode(PersistenceMode.InnerDefaultProperty)]
      这将产生预期的效果...

      HTH。

      【讨论】:

      • 对不起,我至少会有两个这样的集合,所以InnerDefaultProperty 不会这样做。 InnerProperty 会,但这本身不起作用(虽然我设法破解它,等待我的回复)。
      猜你喜欢
      • 2015-03-04
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多