我有一个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之后调用它?
答案 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时,检查该值以查看是否刚刚添加了某人,如果是,则显示通知。