【问题标题】:Which is the last event to set a control's properties?设置控件属性的最后一个事件是什么?
【发布时间】:2011-06-16 16:13:25
【问题描述】:

在今天的一个面试问题中,有人问我哪个是页面生命周期中可以设置控件属性的最后一个事件。我说这将是事件(例如按钮单击等),或者如果没有事件,则在页面加载事件中设置它。然后他说我想要最后一个事件的名字。

更新控件属性的最后一个事件是什么?为什么要使用这样的事件?而不是页面加载或按钮点击等?

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    我会说它是 PreRenderComplete 事件,因为页面是在之后立即呈现的

    尽管查看 MSDN page lifecyle,但 SaveStateComplete 事件在此之后仍会发生。虽然如果您要使用它,您将无法将控件的新属性保存到 ViewState。

    在实践中,我个人会使用 PreRender 事件进行“最终”控制更改。

    【讨论】:

    • 我支持这种说法。 ASP.NET Page Life Cycle 文本建议使用 PreRender: "... 在渲染阶段开始之前对页面内容或其控件进行最终更改。"
    【解决方案2】:

    SaveStateComplete 是最后一个基于页面的事件,您可以在其中设置控件属性。但是,SaveStateComplete 在控件本身中不可用,并且在那里设置的任何属性都不会保留在 ViewState 中。由于最初的问题与“页面生命周期”有关,我认为这将是正确的答案。

    PreRenderComplete 是最后一个基于页面的事件,您可以在其中设置控件属性并使它们仍保留在 ViewState 中。但是,与 SaveStateComplete 一样,它在控件中不可用。

    PreRender 是控件和页面中可用的最后一个事件,您可以在其中设置属性并将它们保留在 ViewState 中。

    【讨论】:

    • 我有自定义控件,自定义处理程序上的属性未更新。我有override void OnPreRenderoverride void RecreateChildControlsoverride void CreateChildControls
    • public string Aviso { get { //EnsureChildControls(); String s = (String)ViewState["Aviso"]; return ((s == null) ? String.Empty : s); } set { //EnsureChildControls(); ViewState["Aviso"] = value; //EnsureChildControls(); } }
    猜你喜欢
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多