在Response.Redirect之后调用函数

时间:2010-08-18 20:42:00

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

我有一个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之后调用它?

4 个答案:

答案 0 :(得分:3)

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

The documentation表示你可以将endResponse参数的值设置为false,并继续执行代码,但实际上,我看到它有时会工作,而不是其他工作。这是我不信任文档的极少数情况之一,事实上,后来重定向通常是我想要的。

答案 1 :(得分:0)

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

更长的答案是,如果您在重定向之前设置了Cookie或会话变量,则可以在people.aspx页面中检测到该内容并调用您的函数(如果已设置)(请不要忘记将其清除为这一点)。

答案 2 :(得分:0)

Response.Redirect(newUri, false);
//stuff needed to be done before ending the handling here.
ApplicationInstance.CompleteRequest();

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

答案 3 :(得分:0)

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