【问题标题】:Response.Redirect in ASP.NET AJAX callsASP.NET AJAX 调用中的 Response.Redirect
【发布时间】:2011-12-26 02:11:17
【问题描述】:

我在 UpdatePanel 中有一个按钮,如果单击该按钮,在某些情况下会将用户重定向到同一文件夹中的另一个页面,否则将使用一些信息更新 UpdatePanel。如果我以这种方式进行重定向:

Response.Redirect("Test.aspx");

它会重定向到 /Test.aspx,这在大多数情况下会很好,但问题是应用程序是通过反向代理(在 x.com/y/)访问的,这将导致一些问题,因为 /Test .aspx 会将用户重定向到执行代理的服务器根目录中不存在的文件。

是否可以强制重定向跳过 / 内容,因为在这种情况下没有必要,因为两个文件都在同一个文件夹中。

编辑:代码示例

<asp:ScriptManager ID="script" runat="server" />
<asp:UpdateProgress ID="prog" runat="server" AssociatedUpdatePanelID="up">
   <ProgressTemplate>
      <h1>Waiting...</h1>
   </ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="up" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
   <ContentTemplate>
       <asp:TextBox ID="txt" runat="server" />
           <asp:Button ID="btn" runat="server" OnClick="click" Text="Button" />
    </ContentTemplate>        
</asp:UpdatePanel>

点击方法:

protected void click(object sender, EventArgs e)
{
  Thread.Sleep(3000);
  if (txt.Text == "redirect")
     Response.Redirect("Test.aspx");
  else
     txt.Text = "";
}

【问题讨论】:

  • 你的问题不够清楚,能不能再详细一点?

标签: asp.net ajax asp.net-ajax


【解决方案1】:

您是否尝试过重定向到相对路径?像下面这样的?

Response.Redirect("~/Test.aspx") 

请给出Test.aspx 所在的正确相对路径。希望这会有所帮助。

【讨论】:

  • 当我在 Bugzilla ( 1|#||4|12|pageRedirect||%2fTest. aspx|).
【解决方案2】:

您不能在异步回发中重定向。将按钮添加为PostBackTrigger

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <Triggers>
        <asp:PostBackTrigger ControlID="Button1" />
    </Triggers>
    <ContentTemplate>

    </ContentTemplate>
</asp:UpdatePanel>   

另一种解决方案是将以下脚本模块添加到您的web.config

<httpModules>
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpModules>

【讨论】:

  • 是的,有可能。它不会创建 302 或类似的东西,但帖子的响应在 bugzilla "1|#||4|12|pageRedirect||%2fTest.aspx|" 中看起来像这样我猜这是一些自动生成的javascript或重定向页面的东西。
  • @Nocklas:不,在异步回发期间尝试重定向时会出现异常。
  • 提供文件的相对路径有什么问题?似乎是最简单的解决方案,也是最具扩展性的解决方案。
  • 由于此代码将托管在 b.com 上,并且还通过 a.com/b/ 上的反向代理访问,因此 /Test.aspx 等链接在通过反向代理访问时会成为问题。如果反向代理不需要特殊的规则来处理这样的事情,那就太好了。
【解决方案3】:

在您的 ajax 回调处理程序中,您应该检查 301 状态代码并如下所示重定向

response = ajaxContext.get_response();
if (response.get_statusCode() == 301)
  window.location = response.getResponseHeader('Location');

【讨论】:

    猜你喜欢
    • 2013-11-14
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 2011-08-21
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多