我遇到了一个问题:当我从MasterPage调用Response.Redirect()时,它不起作用。 好吧,调试我可以看到,直到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()” - 例如 - 我想进入收件人选择页面,但是当我点击发送按钮时,我总是看到同一页面。
错误是什么?
答案 0 :(得分:1)
我不确定我是否完全理解您对问题的描述,但有以下几点需要考虑:
你提到了一个发送按钮。如果是这样,点击它会触发javascript回发到服务器。此回发是原始URL。我不确定你用Javascript修改了什么,但我认为它不会改变回发URL(和查询字符串)。
如果您需要执行逻辑以重定向,您可能希望在服务器上的按钮单击事件中执行。
如果您不需要在服务器上执行任何逻辑,您可以使用javascript重定向:
window.location = "chooseRecipients.aspx";
答案 1 :(得分:1)
无法测试这个理论(此刻从记忆中运行),但请试一试:
(抱歉,稍微清理了一下代码)
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()
}
}
}
答案 2 :(得分:1)
如果您想将未登录的用户重定向到登录页面,您应该检查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);
}
所有其他网站都将被重定向。
答案 3 :(得分:0)
我不知道它是否是你问题的根源,但我会改变两件事。我将您的代码更改为:
Response.Redirect("~/chooseRecipients.aspx", false);
并将逻辑移至PageLoad