我有一个用户控件,如:
<my:menu ID="menu" runat="server">
</my:menu>
现在我需要在用户控件中存储一个集合,例如:
<my:menu ID="menu" runat="server">
<values>
<value>aaa</value>
<value>aaa</value>
</values>
</my:menu>
但是我不确定如何构建结构来保存值并读取usercontrol页面加载中的值。
我尝试在其中创建一个带有公共值的公共类值。但它不起作用。
任何提示?
答案 0 :(得分:1)
您的财产上还需要[ParseChildren(true,"Values")]
属性[PersistenceMode(PersistenceMode.InnerProperty)]
属性。
答案 1 :(得分:0)
您可以在usercontrol后面的代码中创建任何类型的公共属性。
public string MenuValues
{
get
{
return _menuValues;
}
set
{
_menuValues = value;
}
}
然后你可以像这样设置它们:
<my:menu ID="menu" runat="server" MenuValues="A,B,D,W,Q,R" />
修改强>
由于您正在寻找更好的解决方案,因此您必须创建自定义服务器控件,因为您无法在Web用户控件中嵌套子控件。
您需要使用PersistenceMode属性来执行此操作。这是一个示例属性:
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[PersistenceMode(PersistenceMode.InnerProperty)]
public ScriptReferenceCollection ScriptReferences
{
get
{
if (scriptReferenceCollection == null)
{
if (scriptReferenceArrayList == null)
{
this.EnsureChildControls();
if (scriptReferenceArrayList == null)
scriptReferenceArrayList = new ArrayList();
}
scriptReferenceCollection = new ScriptReferenceCollection(scriptReferenceArrayList);
}
return scriptReferenceCollection;
}
}
然后我可以像这样添加ScriptReferences:
<uc1:MyUserControl ID="MyUserControl1" runat="server">
<ScriptReferences>
...
</ScriptReferences>
</uc1:MyUserControl>
答案 2 :(得分:0)
这可以通过使用Templated User Controls来完成。请检查一下。