Вызов функции после Response.Redirect - PullRequest
0 голосов
/ 19 августа 2010

У меня есть сайт ASP.NET, и я использую jGrowl для отображения уведомлений пользователю.Это прекрасно работает, когда пользователь остается на той же странице, но что, если я перенаправляю пользователя.

Например, AddPerson.aspx - это страница для добавления нового человека.После добавления человека пользователь перенаправляется на People.aspx.Затем я хотел бы отобразить уведомление «Джош Смит был добавлен».

В настоящее время у меня на главной странице есть функция, выполняющая 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 ]

3 голосов
/ 19 августа 2010

Response.Redirect завершает обработку на странице (и выдает исключение ThreadAbort).Вы не можете позвонить после Response.Redirect.Вызовите его раньше или сделайте первым на перенаправляемой странице.

В документации сказано, что вы можете установить значение параметра endResponse в значение falseвыполнение кода продолжается, но на практике я видел, как оно иногда работает, а другие не работают.Это один из тех редких случаев, когда я не доверяю документам, и действительно, перенаправление потом, как правило, то, чего я хочу в любом случае.

0 голосов
/ 19 августа 2010

Один из вариантов, который вам нужно, - это «сообщить» странице, что пользователь был недавно добавлен. Например, вы можете поместить что-то в URL, чтобы сигнализировать об этом, или вы можете поместить что-то в сеанс. Затем при рендеринге People.aspx проверьте это значение, чтобы увидеть, был ли кто-то только что добавлен, и если да, то покажите уведомление.

0 голосов
/ 19 августа 2010
Response.Redirect(newUri, false);
//stuff needed to be done before ending the handling here.
ApplicationInstance.CompleteRequest();

Обычно, однако, я использую свой собственный редирект, который позволяет мне уточнить, хочу ли я 301, 303, 307 или (редко) 302 Response.Redirect.

0 голосов
/ 19 августа 2010

Короткий ответ: ты не можешь. После перенаправления страница больше не выполняется.

Более длинный ответ: если вы установите cookie или переменную сеанса перед перенаправлением, вы можете обнаружить это на своей странице people.aspx и вызвать вашу функцию, если она установлена ​​(не забудьте очистить ее как этот пункт ).

...