aspnet usercontrol集合

时间:2011-12-02 16:36:12

标签: c# asp.net user-controls

我有一个用户控件,如:

<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页面加载中的值。

我尝试在其中创建一个带有公共值的公共类值。但它不起作用。

任何提示?

3 个答案:

答案 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来完成。请检查一下。