ASP.NET Designer - как создать разметку времени разработки? - PullRequest
0 голосов
/ 04 августа 2010

Я хочу сгенерировать это:

<x:MyControl id="a" runat="server">
   <Scripts>
        <x:MyScript .. />
   </Scripts>
</x:MyControl>

Я настроил элемент управления следующим образом:

[
ParseChildren(true, "Scripts"),
DefaultProperty("Scripts")
]
public class MyControl: Control
{

    [
    PersistenceMode(PersistenceMode.InnerDefaultProperty),
    MergableProperty(false)
    ]
    public MyScriptCollection Scripts
    {
        get { return _scripts; }
        set { _scripts = value; }
    }
}

Но это не работает ... Это не позволит мне создатьсписок сценариев ... что не так с моим определением?

EDIT: Кроме того, объекты MyScript в MyScriptCollection не наследуются от базового класса элемента управления.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 04 августа 2010

Когда вы говорите: «Это не позволит вам создавать ...», вы имеете в виду, что intellisense не заполняет вас в html-редакторе? Вы все равно пытались создать элементы и посмотреть, работает ли это?

Вы должны определить свои собственные html-элементы и атрибуты для элемента управления, чтобы они отображались в intellisense, поэтому вы должны просто игнорировать их, пока у вас не получится то, что вам нужно.

0 голосов
/ 28 сентября 2010

Кажется, что есть проблема, если потомки не являются пользовательскими элементами управления, особенно с более сложной разметкой в ​​элементах управления и более длинными деревьями наследования. Не всегда так, но для меня это кажется последовательным.

Может быть, это ошибка, а может и нет.

0 голосов
/ 04 августа 2010

Я только что написал эти тестовые классы:

[ParseChildren(true)]
public class MyControl : Control
{
    [PersistenceMode(PersistenceMode.InnerProperty)]
    public MySubControlCollection SubControls { get; set; }

    protected override void Render(HtmlTextWriter writer)
    {
        base.Render(writer);
        foreach (var control in SubControls)
        {
            writer.Write(control.Name);
        }
    }
}

public class MySubControlCollection : Collection<MySubControl>
{
}

public class MySubControl : Control
{
    public string Name { get; set; }
}

И эта тестовая разметка:

<test:MyControl runat="server">
    <SubControls>
        <test:MySubControl runat="server" Name="Hello" />
        <test:MySubControl runat="server" Name="World" />
    </SubControls>
</test:MyControl>

И все работает как положено. Можете ли вы описать, что вы подразумеваете под "не работает"?

...