如何在Page.IsPostBack之前运行事件处理程序

时间:2018-05-29 20:02:14

标签: c# asp.net

我想在按钮事件处理程序中运行代码,但if(Page.IsPostBack)条件首先运行并包含重定向,因此事件永远不会运行。

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack)
    {
        (do some stuff with save button pressed...)

        // then return the same page to prevent another post on refresh 
        Response.Redirect(Request.Url.AbsoluteUri);
    }
}

并在该页面上有另一个调用处理程序的按钮:

protected void Export_Click(object sender, EventArgs e)
{ 
    (do other stuff..)
}

有没有办法首先运行处理程序或检查单击了哪个按钮,以便我可以为重定向添加条件? 感谢。

1 个答案:

答案 0 :(得分:2)

此行为实际上是WebForms中的设计。为了保持无状态,只要你想发起服务器端事件,就会发生完整的回发。

所以简短的答案是否定的,你不能强迫你的事件发生在Page_Load之前。

但是,您可以稍微重构您的设计以获得您想要的行为。目前看起来好像你依赖于发生了一个PostBack来执行你的保存逻辑。您可以在适合您的用户期望保存方式的事件中处理它,而不是处理Page_Load事件中的逻辑。

如果通过按下按钮触发保存,则移动逻辑以处理保存并重定向到Save_Click事件将允许与PostBack相关的其他事件也执行自己的逻辑。