我想制作具有几个<input type='checkbox' />
控件的自定义控件,这些控件在 Render 方法中呈现。是否可以在这些控件上保留 ViewState(例如是否选中)?
有一种方法可以通过使用 ASP.NET 服务器 CheckBox 控件,使用 this.Controls.Add() 将它们添加到 OnLoad 事件中,并且每次都给它们相同的 Id,但我不想这样做:)
如果要将 ViewState 恢复为动态控件,则必须在加载事件之前重新创建该控件。这意味着将该代码放入Init
处理程序中。
创建控件时,请确保先将它们添加到页面中,然后再对其设置任何属性。这是因为,为了让 ViewState 管理器考虑对控件进行管理,它必须检测到更改,并且只有在控件被添加到 Controls 集合后才能检测到更改。
设置显式 ID也很重要。保存和恢复 ViewState 时,控件 ID 必须匹配。
还要确保在页面生命周期的正确时刻 (OnInit) 创建控件。
您可以直接访问 ViewState:
bool checked = (bool)(ViewState["ThisControlCheckState"] ?? false);
if (checked) {
write("<input ... >");
}
else {
write("<input ... >");
}
要保存用户的值,您可以在 PostBack 中执行以下操作:
ViewState["ThisControlCheckState"] = request.Params["checkboxName"].ToString() == "1";