页面循环和viewstate问题

时间:2009-10-26 16:18:08

标签: asp.net

需要页面生命周期的帮助。

当我有一个按钮时,它的click处理程序在ViewState中存储一个值 单击按钮时会发生回发,但如果我尝试在pageload中读取viewstate值,则会得到错误的值。

刷新页面时,需要根据viewstate中的值显示标签。

Page_Load不是一个合适的地方。

在哪个页面事件中我应该显示此标签?

4 个答案:

答案 0 :(得分:5)

因此页面加载事件流程为:

  1. 对表单执行操作会导致回发
  2. Page_Load活动
  3. 按钮点击活动
  4. 渲染/卸载事件
  5. 在步骤2中,您正在从视图状态读取变量并设置标签。在步骤3中,您将在视图状态中设置值。

    正如您所观察到的那样,您正在以错误的顺序使用这些事件。有两种方法可以解决这个问题:将标签设置器代码放在Render / Unload事件中。另一种是重构代码,使标签通过Button Click事件而不是Page_Load事件设置;我建议将其作为正确的行动方案。

    您可能需要结帐What is the ‘page lifecycle’ of an ASP.NET WebForm?以更好地处理网页生命周期。

    <小时/> 回复评论:如果要设置多个标签,您可以查看内联代码来设置标签。代码如下所示:

    <强>代码页

    <asp:Label id="id1" runat="server" text="<%=Label1Text%>" />
    

    <强>代码隐藏

    private string m_Label1Text;
    public property string Label1Text {
        get { return m_Label1Text; }
        set { m_Label1Text = value; }
    }
    

    这样,您可以通过Label1Text属性设置文本,并在呈现时将其传输到表单。如果您需要有关内联代码的更多信息,可以在此处尝试此Tutorial

答案 1 :(得分:0)

Page_LoadComplete在处理完控件事件后直接发生,而Page_Load直接在控件事件发生之前发生。

http://msdn.microsoft.com/en-us/library/ms178472.aspx

答案 2 :(得分:0)

你遇到的问题是Page_Load在按钮点击处理程序之前运行,所以你得到:

  1. 点击按钮
  2. 检查Viewstate值(尚未设置)
  3. 按钮处理程序运行并设置Viewstate
  4. 你可以试试Page_Prerender,这应该在触发控制处理程序之后发生。

答案 3 :(得分:0)

覆盖代码隐藏中的LoadViewState和SaveViewState方法。