【发布时间】:2011-06-16 16:13:25
【问题描述】:
在今天的一个面试问题中,有人问我哪个是页面生命周期中可以设置控件属性的最后一个事件。我说这将是事件(例如按钮单击等),或者如果没有事件,则在页面加载事件中设置它。然后他说我想要最后一个事件的名字。
更新控件属性的最后一个事件是什么?为什么要使用这样的事件?而不是页面加载或按钮点击等?
【问题讨论】:
标签: asp.net
在今天的一个面试问题中,有人问我哪个是页面生命周期中可以设置控件属性的最后一个事件。我说这将是事件(例如按钮单击等),或者如果没有事件,则在页面加载事件中设置它。然后他说我想要最后一个事件的名字。
更新控件属性的最后一个事件是什么?为什么要使用这样的事件?而不是页面加载或按钮点击等?
【问题讨论】:
标签: asp.net
我会说它是 PreRenderComplete 事件,因为页面是在之后立即呈现的
尽管查看 MSDN page lifecyle,但 SaveStateComplete 事件在此之后仍会发生。虽然如果您要使用它,您将无法将控件的新属性保存到 ViewState。
在实践中,我个人会使用 PreRender 事件进行“最终”控制更改。
【讨论】:
PreRender: "... 在渲染阶段开始之前对页面内容或其控件进行最终更改。"
SaveStateComplete 是最后一个基于页面的事件,您可以在其中设置控件属性。但是,SaveStateComplete 在控件本身中不可用,并且在那里设置的任何属性都不会保留在 ViewState 中。由于最初的问题与“页面生命周期”有关,我认为这将是正确的答案。
PreRenderComplete 是最后一个基于页面的事件,您可以在其中设置控件属性并使它们仍保留在 ViewState 中。但是,与 SaveStateComplete 一样,它在控件中不可用。
PreRender 是控件和页面中可用的最后一个事件,您可以在其中设置属性并将它们保留在 ViewState 中。
【讨论】:
override void OnPreRender,override void RecreateChildControls,override void CreateChildControls?
public string Aviso { get { //EnsureChildControls(); String s = (String)ViewState["Aviso"]; return ((s == null) ? String.Empty : s); } set { //EnsureChildControls(); ViewState["Aviso"] = value; //EnsureChildControls(); } }