【问题标题】:How can i have Response.Redirect() work from MasterPage?我怎样才能让 MasterPage 中的 Response.Redirect() 工作?
【发布时间】:2009-01-21 11:41:07
【问题描述】:

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

可能是什么错误?

【问题讨论】:

  • 附注:使用会话存储变量时要小心。请记住,用户可能会在您的网站上打开两个选项卡,并且每个页面都会覆盖以前的值。在查询字符串中发送返回 url 会更好

标签: c# javascript asp.net


【解决方案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);
}

所有其他网站都将被重定向。

【讨论】:

    【解决方案2】:

    我不确定我是否完全理解您对问题的描述,但这里有几点需要考虑:

    你提到了一个发送按钮。如果这是一个 ,单击它会触发一个 javascript 回发到服务器。此回发是到原始 URL。我不确定你用 Javascript 修改了什么,但我认为它不会改变回发 URL(和查询字符串)。

    如果您需要执行重定向逻辑,您可能希望在服务器上的按钮单击事件中执行。

    如果您不需要在服务器上执行任何逻辑,您可以使用 javascript 进行重定向:

    window.location = "chooseRecipients.aspx";
    

    【讨论】:

      【解决方案3】:

      无法测试这个理论(目前凭记忆运行),但试一试:

      (抱歉,代码也清理了一下)

      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()
              }
          }
      }
      

      【讨论】:

        【解决方案4】:

        我不知道这是否是您问题的根源,但我会改变两件事。我会将您的代码更改为:

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

        并将逻辑移至 PageLoad

        【讨论】:

          猜你喜欢
          • 2021-01-22
          • 2011-04-26
          • 1970-01-01
          • 1970-01-01
          • 2013-07-22
          • 2013-04-26
          • 1970-01-01
          • 1970-01-01
          • 2011-02-28
          相关资源
          最近更新 更多