我想生成这个:
<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对象不会从控件基类继承。
感谢。
答案 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)
如果孩子有时不是自定义控件,似乎存在问题,特别是在控件和更长的继承树中有更复杂的标记。并非总是如此,但对我来说似乎是一致的。
也许这是一个错误,也许不是。