【问题标题】:Response.Redirect() doesn't work .net 4.0Response.Redirect() 不起作用.net 4.0
【发布时间】:2011-10-21 22:47:19
【问题描述】:

单击按钮时,我在 JS 函数中调用了一个 javascript 函数,我重定向到了一个 aspx 页面,在 aspx 页面中我想重定向到另一个页面(这部分不起作用)。 response.redirect 不重定向,只是发回当前页面。知道为什么它不起作用。

这是我的代码:

评论.aspx:

<asp:Button ID="btnComplt" runat="server" Text="Complete" OnClientClick ="return compAsgn()" />

function compAsgn() {
       if (window.confirm("Submit all images and complete the assignment?"))
           window.location = "SendImages.aspx?insid=" + $("#IAssignmentId").val() + '&option=complete';
       else
           return false;

SendImages.aspx:

 protected void Page_Load(object sender, EventArgs e)
        {
            assignmentId = Convert.ToInt32(Request.QueryString["insid"]);
            string url = "Review.aspx?insid" + assignmentId.ToString() + "&viewOption=review";

            string qstrVal = string.Empty;
            qstrVal = Request.QueryString["option"].ToString().ToLower();
            if (qstrVal != null && qstrVal == "complete")
            {
                using (ServiceClient client = new Proxies.ServiceRef.ServiceClient())
                {
                    List<AssignmentInfo> ainfo = new List<AssignmentInfo>();
                    ainfo = client.GetAssignmentInfo(assignmentId);
                    if (ainfo.Count > 0)
                    {
                        if (ainfo[0].UploadedCount == 0)
                        {
// AfarSessionData class has a property called ProfileId, which is session variable.  
                            if (AfarSessionData.ProfileId == "000000")
                                url = "Admin.aspx";
                            else
                                url = "HomePage.aspx";
                        }


                    }
                }

            }


            Response.Redirect(url, false);
        }

注意:当我调试时,我确实看到控件点击了 SendImages 页面,但我看到 response.redirect 没有重定向,只是回发到当前页面。

【问题讨论】:

  • 使用 fiddler 看看标题怎么说。你应该有一个 302 http 状态。
  • url 在代码中到达该点时的值是多少?
  • Admin.aspx 是 URL 的值

标签: c# asp.net c#-4.0 response.redirect


【解决方案1】:

据我所知,您没有做任何事情来结束请求。我不是 ASP.NET 专家,但我认为您应该:

  • 使第二个参数true 有效地“硬中止”异常请求
  • 创建第二个参数false,然后调用CompleteRequest 来停止管道的其余部分

【讨论】:

  • 或第三个选项,组织您的代码,以便重定向是代码路径中的最后一件事。
  • @Jon 谢谢。你能告诉我如何使用 EndRequest。
  • @BumbleBee:我的错,是CompleteRequest 而不是EndRequest。但只需致电Response.CompleteRequest。问题是,虽然这可能是处理 Page_Load 的最后一点代码,但仍然是页面处理本身。
  • @JonSkeet:尝试了 CompletRequest 和 Request.End() 但没有成功。
【解决方案2】:

与 John Skeets 回答相关的一些附加信息:

//ends request, no exception, calls Response.End() internally
Response.Redirect (url, true);

try
{
    Response.Redirect (url, false);
}
catch(ThreadAbortException e)
{
    //do whatever you need to
}

以下是有关该问题的一些信息:

PRB: ThreadAbortException Occurs If You Use Response.End, Response.Redirect, or Server.Transfer

【讨论】:

  • 我不确定您是否可以从已中止的线程中捕获 ThreadAbortException?
  • 查看链接,“您可以使用 try-catch 语句来捕获此异常。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-09
  • 2013-09-21
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
相关资源
最近更新 更多