ASP.NET Designer - 如何生成此设计时标记?

时间:2010-08-04 01:40:08

标签: .net asp.net controls custom-controls markup

我想生成这个:

<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; }
    }
}

但这不起作用......它不会让我创建一个脚本列表......我的定义有什么问题?

编辑:此外,MyScriptCollection中的MyScript对象不会从控件基类继承。

感谢。

3 个答案:

答案 0 :(得分:0)

我刚刚编写了这些测试类:

[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>

它按预期工作。你能用“不工作”来描述你的意思吗?

答案 1 :(得分:0)

当你说“它不会让你创造......”时你的意思是智能感知器在html编辑器中没有为你填充东西吗?您是否尝试过创建元素并查看它是否有效?

你必须为控件定义你的自定义html元素和属性,让它们显示在intellisense中,所以你必须忽略它,直到你有你想要的东西。

答案 2 :(得分:0)

如果孩子有时不是自定义控件,似乎存在问题,特别是在控件和更长的继承树中有更复杂的标记。并非总是如此,但对我来说似乎是一致的。

也许这是一个错误,也许不是。