【问题标题】:ASP.NET: Viewstate and programmatically adding user controlsASP.NET:Viewstate 和以编程方式添加用户控件
【发布时间】:2010-12-13 01:37:10
【问题描述】:

当使用 LoadControl(string path) 以编程方式添加用户控件时,在用户控件的页面生命周期中,它是否使用其视图状态初始化其子控件?

我问这个问题是因为我的一个以编程方式加载的用户控件有一个 TextBox 控件,该控件没有被 Page_Load 事件的 PostBack 上的视图状态初始化/加载(常规 .aspx 不是这种情况页面,因此我感到困惑)。总的来说,我需要从 Textbox 控件中检索值。

谢谢

【问题讨论】:

标签: asp.net user-controls


【解决方案1】:

ViewState 在 Page_Load 事件之前加载。如果您希望您的控件与 ViewState 一起使用,您需要在该事件之前加载它并将其添加到页面中 - 通常在 PreInit 上。

生命周期参考在这里:
http://msdn.microsoft.com/en-us/library/ms178472.aspx?ppud=4

阅读 Pre Load 事件的描述,该事件紧接在页面加载之前:

如果您需要在加载事件之前对页面或控件执行处理,请使用此事件。

在 Page 实例引发此事件之前,它会为自身和所有控件加载视图状态,然后处理 Request 实例中包含的所有回发数据。

因此到预加载时间已经太晚了。此外,PreInit 事件的描述特别提到它是“创建或重新创建动态控件”的地方。

【讨论】:

  • 谢谢!在相关说明中,我以编程方式添加的用户控件发生在另一个以声明方式加载的用户控件中。这个声明的父用户控件的 PreInit 事件不会被触发(因此方法 'protected void Page_PreInit(object sender, EventArgs e)' 不会被调用)。你知道为什么在这个声明的用户控件中没有调用 Page_PreInit 吗?
  • 控件本身没有 pre-init,因为控件页面生命周期事件是从页面调用的,并且在 PreInit 点控件还没有准备好。请改用 Init。
  • 非常感谢。你的建议救了我。 =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 2011-12-15
  • 2012-08-15
  • 2011-08-14
相关资源
最近更新 更多