在一些书中,我看到他们保存用户控件的自定义属性,如下所示:
private int id = 0;
public int ID
{
get { return id; }
set { id = value; }
}
protected void Page_Init(object sender, EventArgs e)
{
this.Page.RegisterRequiresControlState(this);
}
protected override void LoadControlState(object savedState)
{
object[] ctlState = (object[])savedState;
base.LoadControlState(ctlState[0]);
this.ID = (int)ctlState[1];
}
protected override object SaveControlState()
{
object[] ctlState = new object[2];
ctlState[0] = base.SaveControlState();
ctlState[1] = this.ID;
return ctlState;
}
我的问题是为什么我可以简单地将它(在setter中)存储在viewstate中:Vistate [“ID”] = id;
然后从那里检索它?
答案 0 :(得分:2)
ViewState (您在问题中谈到的内容)和 ControlState (示例代码中显示的内容)之间存在差异:
EnableViewState="false"
,UserControl的用户可以关闭另请参阅MSDN中的这些页面:ASP.NET ViewState Overview和ControlState vs. ViewState
摘录自第一页:
除了查看状态,ASP.NET 支持控制状态。该页面使用 控制状态以持续控制 必须保留的信息 回发之间,即使是查看状态 已禁用页面或用于 控制。像查看状态,控制 state存储在一个或多个hidden中 字段。