【发布时间】:2009-03-31 22:46:40
【问题描述】:
我有一个页面(表单),上面有很多用户控件,我试图用一个按钮来保存所有内容。 UserControls 实际上是嵌套的,所以我想以某种方式向每个 UC 发出信号,告知它应该保存自己,而不是以某种方式将所有内容包装到一个事件中或让单个事件触发一连串的保存事件。
我的计划是使用静态类(this answer 的代码):
public static class RequestScopedFormData
{
private const string save_key = "request_form_is_saving";
public static bool FormIsSaving
{
get
{
object o = HttpContext.Current.Items[save_key];
return Convert.ToBoolean(o);
}
set
{
HttpContext.Current.Items[save_key] = value;
}
}
}
理想情况下,我的 MasterPage 上的按钮将设置 RequestScopedFormData.FormIsSaving = true,并且当 .NET 构建页面及其用户控件时,他们会知道自己执行保存。
我遇到的问题是我无法在页面生命周期中足够早地触发事件以保存用户控件。即使我将保存代码移动到 PreRender 事件,并将保存 ImageButton 移动到页面本身(而不是 MasterPage),我也无法在 UC 保存检查之前将 FormIsSaving 设置为 true。
会发生这样的事情:
- 页面Page_Load
- MasterPage Page_Load
- UC Page_Loads 和 PreRenders(它们 是混合的,它会在之前预渲染一些 它会加载其他人)
- MasterPage SaveButton_Click 事件 (这是我设置课程的地方 变量)
- MasterPage 预渲染
- 页面预渲染
不幸的是,SaveButton_Click 方法发生在加载 UC 之后,因此它们永远不会保存。
【问题讨论】:
标签: .net user-controls page-lifecycle