2010-08-18 53 views
0

我有一个ASP.NET网站,我正在使用jGrowl向用户显示通知。当用户停留在同一页面时,这很有用,但如果我重定向用户,该怎么办?在Response.Redirect后调用函数

示例,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的后?

回答

3

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

The documentation表示您可以将endResponse参数的值设置为false,并让代码执行继续,但实际上,我已经看到它有时会工作,而不能工作其他人。这是我不相信文档活动的罕见情况之一,事实上,事后重定向通常就是我想要的。

0

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

较长的回答是,如果你设置一个cookie或重定向之前一个会话变量,则可以检测到你的页面people.aspx,如果它被设置调用你的函数(不要忘记清除它,因为这点) 。

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

通常情况下,虽然,我用我自己的重定向,让我更清楚我是否想要一个301,303,307或(很少)302的Response.Redirect做。

0

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

相关问题