代码之家  ›  专栏  ›  技术社区  ›  Brian Mains

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

  •  0
  • Brian Mains  · 技术社区  · 14 年前

    我想生成这个:

    <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 回复  |  直到 14 年前
        1
  •  0
  •   Rex M    14 年前

    我刚刚写了这些测试课程:

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

    而且它也像预期的那样工作。你能描述一下你所说的“不工作”是什么意思吗?

        2
  •  0
  •   Erik Funkenbusch    14 年前

    当您说“它不会让您创建…”时,您的意思是IntelliSense不会在HTML编辑器中为您填充内容吗?你是否尝试过创建元素,看看它是否有效?

    您必须为控件定义自定义的HTML元素和属性,以使它们以IntelliSense的形式显示,因此您必须忽略它,直到您拥有所需的内容。

        3
  •  0
  •   Brian Mains    14 年前

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

    也许这是个虫子,也许不是。