【问题标题】:Calling a function after a Response.Redirect在 Response.Redirect 之后调用函数
【发布时间】:2010-08-19 09:08:59
【问题描述】:

我有一个 ASP.NET 站点,我正在使用 jGrowl 向用户显示通知。当用户停留在同一页面上时,这很有效,但是如果我正在重定向用户怎么办。

例如,AddPerson.aspx 是一个用于添加新人的页面。添加人员后,用户将重定向到 People.aspx。然后我想显示“已添加 Josh Smith”的通知。

我目前在我的母版页中有一个执行 javascript 的函数:

public void DisplayNotification(string html, string header)
{
    string text = "\"" + html + "\"";
    string options = "{ header: '" + header + "', life: 6000 }";

    string scriptJGrowl = "$.jGrowl(" + text + ", " + options + ");";
    ScriptManager.RegisterStartupScript(Page, GetType(), Guid.NewGuid().ToString(), scriptJGrowl, true);
}

如何在 Response.Redirect 之后调用它?

【问题讨论】:

    标签: c# asp.net response.redirect jgrowl


    【解决方案1】:

    Response.Redirect 结束页面上的处理(并引发 ThreadAbort 异常)。您不能在 Response.Redirect 之后调用。之前调用它,或者让它成为您要重定向到的页面中的第一件事。

    The documentation 说您可以将 endResponse 参数的值设置为 false,然后继续执行代码,但在实践中,我看到它有时会起作用,而其他一些则不起作用。这是我不信任文档的极少数情况之一,实际上,无论如何,之后重定向通常是我想要的。

    【讨论】:

      【解决方案2】:

      简短的回答是你不能。重定向后页面不再执行。

      更长的答案是,如果您在重定向之前设置了 cookie 或会话变量,您可以在您的 people.aspx 页面中检测到它并调用您的函数(如果已设置)(此时不要忘记将其清除) )。

      【讨论】:

        【解决方案3】:
        Response.Redirect(newUri, false);
        //stuff needed to be done before ending the handling here.
        ApplicationInstance.CompleteRequest();
        

        不过,通常情况下,我使用自己的重定向,这让我更清楚是需要 301、303、307 还是(很少)需要 302 Response.Redirect。

        【讨论】:

          【解决方案4】:

          您必须做的一个选项是“通知”页面最近添加了用户。例如,您可以在 URL 中放置一些东西来表示这一点,或者您可以在会话中放置一些东西。然后在渲染 People.aspx 时检查该值以查看是否刚刚添加了某人,如果是,则显示通知。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-02-08
            • 2016-10-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多