有没有办法在动态呈现的HTML控件中维护ASP.NET ViewState?

时间:2008-11-11 17:37:22

标签: asp.net html render

我想制作自定义控件,它有几个<input type='checkbox' />控件,我在Render方法中渲染。 是否可以在这些控件上保留ViewState(例如,是否已选中)?

有一种方法可以通过使用ASP.NET服务器CheckBox控件来实现, 使用this.Controls.Add()在OnLoad事件中添加它们, 并且每次都给它们相同的ID 但我不打算这样做:)

3 个答案:

答案 0 :(得分:2)

如果要将ViewState恢复为动态控件,则必须在加载事件之前重新创建该控件。这意味着将该代码放在Init处理程序中。

答案 1 :(得分:2)

创建控件时,请确保将它们添加到首页页面,然后在其上设置任何属性。这是因为,为了让ViewState管理器考虑管理控件,它必须检测更改,并且只能在将控件添加到Controls集合后检测更改。

设置明确ID 也很重要。保存并恢复ViewState时,控件ID必须匹配。

还要确保在page lifecycle的正确时刻(OnInit)创建控件。

答案 2 :(得分:1)

您可以直接访问ViewState:

bool checked = (bool)(ViewState["ThisControlCheckState"] ?? false);
if (checked) {
    write("<input ... >");
}
else {
    write("<input ... >");
}

要从用户保存值,您可以在PostBack中执行以下操作:

ViewState["ThisControlCheckState"] = request.Params["checkboxName"].ToString() == "1";