Как я могу иметь Response.Redirect () работать с MasterPage? - PullRequest
5 голосов
/ 21 января 2009

У меня проблема: когда я вызываю 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 ()" - например, я хочу попасть на страницу выбора получателей, но когда я нажимаю кнопку Отправить, я всегда вижу ту же страницу.

В чем может быть ошибка?

Ответы [ 4 ]

1 голос
/ 02 декабря 2011

Если вы хотите перенаправить не авторизованных пользователей на страницу входа, вы должны проверить 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);
}

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

1 голос
/ 21 января 2009

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

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

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

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

window.location = "chooseRecipients.aspx";
1 голос
/ 23 января 2009

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

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

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()
        }
    }
}
0 голосов
/ 21 января 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...