如何从Master Page中使用Response.Redirect()?

时间:2009-01-21 11:41:07

标签: c# javascript asp.net

我遇到了一个问题:当我从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()” - 例如 - 我想进入收件人选择页面,但是当我点击发送按钮时,我总是看到同一页面。

错误是什么?

4 个答案:

答案 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