asp.net有点新鲜。
在我的main.aspx页面中,我有:
<users:UsersControl runat="server" ID="usersControl" />
在我的UserControl page_load中,我有:
ViewState["test"] = "test";
在main.aspx.cs中的Page_PreRender:
log...(ViewState["test"]); <-- empty
为什么我看不到测试的价值?
答案 0 :(得分:1)
答案 1 :(得分:1)
我猜这里的ViewState集合在你提到的两个上下文中是不同的。
第一个是在控件的上下文中,第二个是在页面的上下文中,因此“test”键不会在它们之间共享。
此外,将控件ViewState暴露在控件边界之外并不是一个好主意。例如,使用UserControl上的属性作为viewstate的接口,例如
public string Test
{
get { return this.ViewState["Test"]; }
set { this.ViewState["Test"] = value; }
}
ViewState应被视为用户控件的内部实现细节。
然后,只要您需要在页面中使用此属性:
this.userControl1.Test = "This Goes Into ViewState";