我想制作自定义控件,它有几个<input type='checkbox' />
控件,我在Render方法中渲染。
是否可以在这些控件上保留ViewState(例如,是否已选中)?
有一种方法可以通过使用ASP.NET服务器CheckBox控件来实现, 使用this.Controls.Add()在OnLoad事件中添加它们, 并且每次都给它们相同的ID 但我不打算这样做:)
答案 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";