asp.net - ascx 的 View 状态在回发之间丢失

标签 asp.net viewstate

在我的 ASP.NET 应用程序中,我使用 LoadControl 动态加载 .ascx,使用以下模式:

var ctrl = LoadControl("/path/to/control.ascx");
((ControlType)ctrl).SomeProperty = someData;
placeholder.Controls.Add(ctrl);

我添加的控件将 SomeProperty 属性值直接保存到 ViewState,如下所示:

public int? SomeProperty
{
    get { return (int?)ViewState["SomeProperty"]; }
    set { ViewState["SomeProperty"] = value; }
}

此后,ascx 控件将独立生活,一切正常,直到发生回发。当页面回发时, View 状态突然变为空!我怀疑发生这种情况是因为我在将实例化的 ascx 添加到页面之前操作了 ViewState。另外,我可以通过在 ascx 控件的 Page_Load() 方法中添加以下行来防止 ViewState 丢失:

SomeProperty = SomeProperty;

我必须对每个属性执行上述操作,以确保保留 ViewState。现在,有没有更好的方法来做到这一点?在实例化的 .ascx 添加到页面后操作 ViewState 不是一个选项 - 我需要 Page_Init()Page_Load() 方法中 ViewState 的内容,在我将 .ascx 添加到页面时立即触发。

谢谢。

最佳答案

看看ASP.NET Page Life CycleUnderstanding View State 。 View 状态在初始化后加载,因此您将无法在 Page_Init 中访问它。你最好使用隐藏字段。

如果您执意要使用 View 状态,那么最早可以通过覆盖 LoadViewState 方法(请记住在尝试之前调用 base.LoadViewState访问它)。

关于asp.net - ascx 的 View 状态在回发之间丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1770366/

相关文章:

ASP.NET:压缩 ViewState

ASP.NET 母版页和 View 状态

c# - 检测 View 状态篡改

关于表单回发的 ASP.Net View 状态问题

asp.net - 如何获取 asp :CheckBox out of the ViewState? (__ControlsRequirePostBackKey__)

c# - ASP.NET 中的字典查找效率和请求范围全局变量?可通过 global.asax 和页面/等访问

c# - Spring MVC 中的 Response.Clear 和 Response.ClearContent

asp.net - 在 ASP.NET 和 Silverlight 2 之间共享 DAL 的最佳实践

c# - 处理 asp.net 数据源异常

c# - asp.net 自定义验证器不为文本框触发