【发布时间】:2014-07-30 18:54:09
【问题描述】:
我似乎在为页面生命周期的顺序而苦苦挣扎。根据用户选择按钮 1 或 2,我需要在 Page_Load 事件期间动态添加相应的控件。我的问题是单击按钮时,在读取 Button_Click 事件代码之前执行 Page_Load 事件。直到 Page_Load 事件之后,我的变量“doWhat”才被赋值。如何在 Page_Load 期间为“doWhat”变量分配要读取的值?
下面是两个按钮的asp.net表单代码:
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="Button 1" onclick="Button_Click" />
<asp:Button ID="Button2" runat="server" Text="Button 2" onclick="Button_Click" />
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</div>
</form>
下面是代码:
int doWhat;
protected void Page_Load(object sender, EventArgs e)
{
doWhat = Convert.ToUInt16(ViewState["doWhat"]);
if (doWhat == 1)
{
// code to dynamically load group 1 controls
}
else
{
// code to dynamically load group 2 controls
}
Label1.Text = Convert.ToString(doWhat);
}
protected void Button_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
if (btn.ID == "Button1")
{
doWhat = 1;
}
else
{
doWhat = 2;
}
ViewState.Add("doWhat", doWhat);
}
【问题讨论】:
-
如果您需要在一个请求中执行此操作,那么您的方法是不正确的,因为页面加载在 Button_Click 之前执行,之后将不会再次执行
-
您是否有任何理由希望在
pageload中创建动态控件?相反,您可以将该代码封装为两个不同的函数,并在Button_Click中调用相应的函数。在这种情况下,页面生命周期的顺序不会影响您。 -
嗨 Dennis R,是的,我认为控件需要在 Page_Load 中创建,因为它们将附加事件处理程序。看来它们需要在 Page_Load 中创建才能正常工作。
-
Sergey,是的,这是我的问题,您有什么建议可以让我将该变量传递回 Page_Load 事件以供读取吗?