具有复杂属性的ASP.NET自定义控件

时间:2011-12-15 14:16:07

标签: asp.net custom-controls

我正在开发一个自定义控件(4.0),我想知道如何将业务类重用为属性而不重写它。

我的业务层汇编中有一组类(简化):

public class LatLng
{
    public decimal Lat { get; set; } 
    public decimal Lng { get; set; } 
}

public class MapOptions
{
    ...
    public LatLng Center { get; set; } 
    ...
}

etc...

我想要的是将MapOptions类重用为属性,我的自定义控件类似于:

public class MyControl : WebControl
{
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), PersistenceMode(PersistenceMode.InnerProperty)]
    public MapOptions MapOptions 
    {
        ...

        get 
        {
            return this.ViewState["MapOptions"] as MapOptions;
        }
        set 
        {
            this.ViewState["MapOptions"] = value;
        }

        ...
    }
}

但是通过这种方式,我无法看到LatLng(以及MapOptions用作属性的其他类)的属性作为MapOptions标记的内部部分。仅作为属性。 所以在标记中我能写:

<rec:MyControl ID="control1" runat="server" Width="900" Height="500">
    <MapOptions Center="" />
</rec:MyControl>

但是这样我就失去了LatLng暴露的智能感知,我正在寻找一个解决方案来获得这个:

<rec:MyControl ID="control1" runat="server" Width="900" Height="500">
    <MapOptions>
        <Center Lat="12.0" Lng="2.0" />
    </MapOptions>
</rec:MyControl>

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

尝试添加标记 [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), PersistenceMode(PersistenceMode.InnerProperty)]public class LatLng