1

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

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

4

3 回答 3

2

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

于 2008-11-11T17:51:27.640 回答
2

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

设置显式 ID也很重要。保存和恢复 ViewState 时,控件 ID 必须匹配。

还要确保在页面生命周期的正确时刻 (OnInit) 创建控件。

于 2008-11-11T17:53:57.497 回答
1

您可以直接访问 ViewState:

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

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

ViewState["ThisControlCheckState"] = request.Params["checkboxName"].ToString() == "1";
于 2008-11-11T17:45:50.960 回答