在我的 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 控件就会独立生活,一切都很好,直到发生回发。当页面回发时,视图状态突然变为空!我怀疑发生这种情况是因为我在将实例化的 ascx 添加到页面之前操作了 ViewState。另外,我可以通过在中添加以下行来防止 ViewState 丢失Page_Load()
我的ascx控制方法:
SomeProperty = SomeProperty;
我必须对每个属性执行上述操作,以确保保留 ViewState。现在,有没有更好的方法来做到这一点?在实例化的 .ascx 添加到页面后操作 ViewState 不是一个选项 - 我需要 ViewState 的内容Page_Init()
and Page_Load()
方法,这些方法在我将 .ascx 添加到页面时立即触发。
Thanks.
看看ASP.NET 页面生命周期 http://msdn.microsoft.com/en-us/library/ms178472.aspx and 了解视图状态 http://msdn.microsoft.com/en-us/library/ms972976.aspx。视图状态在初始化后加载,因此您将无法在Page_Init
。你最好使用隐藏字段。
如果您执意要使用视图状态,那么最早可以通过覆盖LoadViewState
方法(记得调用base.LoadViewState
但在尝试访问它之前)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)