【问题标题】:ASP.NET Designer - How Do I generate this Design-Time Markup?ASP.NET Designer - 如何生成此设计时标记?
【发布时间】:2010-08-04 01:40:08
【问题描述】:

我想生成这个:

<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 对象不继承自控件基类。

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    它按预期工作。你能描述一下“不工作”是什么意思吗?

    【讨论】:

    • 它为我提供了 元素,但不允许我输入任何子元素...。我将试一试此设置。谢谢。
    • 哦,我不希望子项成为控件...我希望它们成为对象...类似于 ListControl 基类或带有列的 GridView。你会如何改变它?
    【解决方案2】:

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

    您必须为控件定义自定义 html 元素和属性,以使它们在智能感知中显示,因此您必须忽略它,直到您拥有所需的东西。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2010-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-02
        • 1970-01-01
        • 2012-11-03
        • 2013-07-07
        相关资源
        最近更新 更多