ASP.NET AJAX调用中的Response.Redirect

时间:2011-11-10 11:13:44

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

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

Response.Redirect("Test.aspx");

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

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

编辑:代码示例

<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 = "";
}

3 个答案:

答案 0 :(得分:0)

您是否试过重定向到相对路径?像下面的东西?

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

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

答案 1 :(得分:0)

您无法在异步回发中重定向。将按钮添加为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>

答案 2 :(得分:0)

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

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