需要页面生命周期的帮助。
当我有一个按钮时,它的click处理程序在ViewState中存储一个值 单击按钮时会发生回发,但如果我尝试在pageload中读取viewstate值,则会得到错误的值。
刷新页面时,需要根据viewstate中的值显示标签。
Page_Load不是一个合适的地方。
在哪个页面事件中我应该显示此标签?
答案 0 :(得分: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直接在控件事件发生之前发生。
答案 2 :(得分:0)
你遇到的问题是Page_Load在按钮点击处理程序之前运行,所以你得到:
你可以试试Page_Prerender,这应该在触发控制处理程序之后发生。
答案 3 :(得分:0)
覆盖代码隐藏中的LoadViewState和SaveViewState方法。