1

如何在页面加载时增加要处理的步长值?例如,在下面的代码中,由于 ASP.NET 页面生命周期,viewstate 变量直到 Page_Load 之后才会递增。

protected void Page_Load(object sender, EventArgs e)
{
    switch ((int)ViewState["step"])
    {
        //do something different for each step
    }
}

protected void btnIncrementStep_Click(object sender, EventArgs e)
{
    //when the button is clicked, this does not fire 
    //until after page_load finishes
    ViewState["step"] = (int)ViewState["step"] + 1;
}
4

4 回答 4

2

没有办法解决这个问题。Page_Load 事件总是在任何控制事件被触发之前发生。如果您需要在控制事件之后执行某些操作,请使用 Page_PreRender。

ASP.Net 页面生命周期图像

于 2009-01-06T23:34:35.840 回答
2

只需将 switch 语句移动到稍后发生的事件中。例如 LoadComplete() 或 PreRender()。PreRender 可能有点晚了,这取决于你想要做什么。

于 2009-01-06T23:45:08.457 回答
0

在LoadComplete事件期间或什至在 OnLoad 期间递增。

您拥有决定是否从表单数据中增加所需的所有信息。您无需等待 onClick() 事件。检查表单以查看是否会单击该项目。

查看 request.params("__EVENTARGS")

这标识了导致回发的控件。

于 2009-01-06T23:34:45.687 回答
0

如果您需要在 Page_Load 期间增加并检查该值,则可以选择将值存储在会话中而不是 ViewState 中,例如:

private int Step
{
  get { return (int)Session["step"]; }
  set { Session["step"] = value; }
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
       Step = 0; // init
    else
       Step ++; // increment

    switch (Step)
    {
        //do something different for each step
    }
}
于 2009-01-06T23:52:40.580 回答