English 中文(简体)
当ASP.NET页面加载时,如何增加一个步骤值进行处理?
原标题:
  • 时间:2009-01-06 23:22:49
  •  标签:

当页面加载时,如何递增步骤值进行处理?例如,在以下代码中,由于ASP.NET页面生命周期,视图状态变量直到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;
}
最佳回答

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

问题回答

无法绕过这一点。Page_Load事件总是会在任何控件事件触发之前发生。如果您需要在控件事件之后执行某些操作,请使用Page_PreRender。

ASP.Net页面生命周期图像

增量在 LoadComplete 事件期间,甚至在 OnLoad 期间进行。

你拥有所有必要的信息来决定是否根据表单数据进行增量。你不需要等待onClick()事件。查看表单以确定该项目是否会被点击。

查看request.params("__EVENTARGS")

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

如果在Page_Load期间需要增加并检查该值,则一个选项是将该值存储在Session中而不是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
    }
}




相关问题
热门标签