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





Я не знаю, является ли это корнем вашей проблемы, но я бы изменил 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);
}
Все остальные сайты будут перенаправлены.
Примечание: будьте осторожны при использовании сеанса для хранения переменных. Имейте в виду, что у пользователя могут быть открыты две вкладки с вашим сайтом, и каждая страница перезаписывает предыдущее значение. Лучше отправить URL-адрес возврата в строке запроса