Как я могу заставить Response.Redirect () работать с MasterPage?

У меня проблема: когда я вызываю Response.Redirect () из MasterPage, он не работает. Что ж, отлаживая, я вижу, что до тех пор, пока метод Pre_Render () не загружается, целевая страница загружается, но затем отображается предыдущая страница.

Вот код для лучшего объяснения:

(из MasterPageMain.master.cs)

protected void Page_Init(object sender, EventArgs e)
{
    string m_QueryStringValue = Request.QueryString.Get("action");
    if ((!string.IsNullOrEmpty(m_QueryStringValue)) && (m_QueryStringValue.ToLower() == "send"))
    {
        if (Session["to"] != null && Session["to"] is List<string>) this.SendPageByMail();
        else
        {
            Session.Add("AddressToSend", Request.RawUrl);
            Response.Redirect("~/chooseRecipients.aspx");
        }
    }
}

У меня есть javascript, который добавляет строку запроса «action = send», когда я нажимаю кнопку «Отправить».

Если я нахожусь на странице «~ / somethingInterestingToSend ()», например, я хочу попасть на страницу выбора получателя, но когда я нажимаю кнопку «Отправить», я всегда вижу одну и ту же страницу.

Что может быть ошибкой?

Примечание: будьте осторожны при использовании сеанса для хранения переменных. Имейте в виду, что у пользователя могут быть открыты две вкладки с вашим сайтом, и каждая страница перезаписывает предыдущее значение. Лучше отправить URL-адрес возврата в строке запроса

Eduardo Molteni 23.01.2009 01:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
1
17 694
4

Ответы 4

Я не знаю, является ли это корнем вашей проблемы, но я бы изменил 2 вещи. Я бы изменил ваш код на:

Response.Redirect("~/chooseRecipients.aspx", false);

и переместите логику в PageLoad

Я не уверен, что полностью понимаю ваше описание проблемы, но вот несколько моментов, которые следует учитывать:

Вы упоминаете кнопку отправки. Если это, щелчок по нему запускает обратную передачу javascript на сервер. Это обратная передача на исходный URL. Я не уверен, что вы изменяете с помощью Javascript, но не думаю, что это изменит URL-адрес обратной передачи (и строку запроса).

Если вам нужно выполнить логику для перенаправления, вы можете захотеть выполнить событие нажатия кнопки на сервере.

Если вам не нужно выполнять какую-либо логику на сервере, вы можете выполнить перенаправление с помощью javascript:

window.location = "chooseRecipients.aspx";

Не могу проверить эту теорию (на данный момент работает по памяти), но попробуйте:

(извините, тоже немного почистил код)

protected void Page_Init(object sender, EventArgs e)
{
    string m_QueryStringValue = Request.QueryString.Get("action") ?? "";
    if (m_QueryStringValue.ToLower() == "send")
    {
        if ( (Session["to"] as List<string>) != null) 
        {
            this.SendPageByMail();
        }
        else
        {
            Session.Add("AddressToSend", Request.RawUrl);
            Response.Redirect("~/chooseRecipients.aspx", false);
            HttpContext.Current.ApplicationInstance.CompleteRequest()
        }
    }
}

Если вы хотите перенаправить не авторизованных пользователей на страницу входа, вам следует проверить Request.RawUrl () следующим образом:

string strURL=Request.RawUrl.ToUpper();

if (!strURL.Contains("LOGIN.ASPX") && !strURL.Contains("LOGOUT.ASPX")
    && !strURL.Contains("ERROR.ASPX") && !strURL.Contains("UNDERCONSTRUCTION.ASPX"))
{
    Response.Redirect("~/Login.aspx", false);
}

Все остальные сайты будут перенаправлены.

Другие вопросы по теме