Пользовательский элемент управления ASP.NET со сложными свойствами - PullRequest
3 голосов
/ 15 декабря 2011

Я разрабатываю пользовательский элемент управления (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>

Но таким образом я теряю intellisense для всех открытых LatLng, я ищу решение, чтобы получить это:

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

Есть предложения?

1 Ответ

0 голосов
/ 10 октября 2013

Попробуйте добавить тег [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), PersistenceMode(PersistenceMode.InnerProperty)] к public class LatLng

...