首页 > 解决方案 > 如何在 Page.IsPostBack 之前运行事件处理程序

问题描述

我想在按钮事件处理程序中运行代码,但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..)
}

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

标签: c#asp.net

解决方案


这种行为实际上是在 WebForms 中设计的。为了保持无状态,只要您希望触发服务器端事件,就会发生完整的回发。

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

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

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


推荐阅读