使用Control时,Viewstate值被删除

时间:2015-03-31 09:58:29

标签: c# asp.net

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

为什么我看不到测试的价值?

2 个答案:

答案 0 :(得分:1)

我已经找到了与您的问题类似的答案:

.net ViewState in page lifecycle

了解生命周期是必要的,那么为什么不在UserControl上使用属性呢?

答案 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";