ASP.NET:response.redirect不起作用

6
我有一个.aspx表单,其中有一个下拉框,里面包含我从DB表中检索到的主题。点击提交按钮后,与该主题相关的问题将在网格视图中显示。我通过在按钮单击事件中调用FillGrid()函数来实现这一点。 我还为我的网格视图设置了pageindexchanging,在其中再次调用FillGrid()。在我的FillGrid()函数中,我使用了try catch块。如果发生错误,我想使用Response.Redirect()将页面重定向到错误页面。问题是这个response.redirect不起作用。其中一个原因是在按钮单击后,表单被发布了两次。因为在到达response.redirect语句后,流程会回到调用FillGrid()的按钮单击事件处。我该如何解决这个问题?或者简单地说,我如何防止表单的重复发布?

这是由 UpdatePanel 内部的控件触发的吗? - Jeff Sternal
不,我没有使用UpdatePanel... - anay
7个回答

7
例如,您需要链接index.aspx。那么您应该这样写:
Response.Redirect("index.aspx", true);

但是Response.redirect没有起作用。现在进入设计视图,选择要设置Response.redirect的按钮,按下F4,这将打开按钮属性,然后需要找到PostBackUrl选项,然后定位您想要的URL。参考以下图片:


3

Well, do this...

Response.Redirect("~/err.aspx", false);
HttpContext.Current.ApplicationInstance.CompleteRequest();

现在原始页面不会被提交到浏览器,您将被重定向到新页面。但Response.Redirect("~/err.aspx", true);存在一个问题,这样会形成一个异常,可能会将控制权发送到catch块。

•当然,另一种方式是使用Server.Transfer(),但我不认为您想要这样做。


2

我遇到了完全相同的问题。重定向无法正常工作,因为内容页面的母版页存在错误。 以下是示例代码:

FormsAuthentication.SetAuthCookie(loginUserDetail.UserName, false);
Response.Redirect(FormsAuthentication.DefaultUrl, false);

FormsAuthentication.DefaultUrl的值为"/membersarea/wellcome.aspx",而wellcome.aspx有一个名为Site.master的主页。

Site.master存在JavaScript错误,因此Response.Redirect命令无法工作。


1

试试这个:

Response.Redirect("url");
Response.End;

这是Response.Redirect的默认行为。 - Jeff Sternal
1
Response.Redirect("url", true) 的意思是相同的。 - Marc

0
对我来说,重定向问题出在我的web.config文件中。在那个文件中,每个页面都被明确允许访问。一旦我在web.config文件中添加了我要重定向到的新页面的代码块,重定向就起作用了。希望如果有人遇到类似的问题,这可以节省他们的时间,不会像我一样浪费大部分时间。
在web.config文件中,我添加了以下代码块:
  <location path="sitedirectory/yournewpage.aspx">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

你好,@Steve,欢迎来到Stack Overflow。这绝对是一个有效的解决方案,用于当未经身份验证的用户访问页面时不会自动重定向的问题。话虽如此,原始问题是关于显式的Response.Redirect(),与框架内置的身份验证机制无关。相反,他们正在处理与Web表单事件模型相关的问题。 - Jeremy Caney
谢谢。我意识到我的解决方案并没有具体地解决 OP 的问题,但是既然我在这里寻找与 Response.Redirect 有关的问题的解决方案,那么我认为其他人也可能会需要。将来,我会更加注意解决 OP 具体的问题。 - Steve

0
当服务器端编码无法解决问题时,你可以尝试使用JavaScript,例如location.href=someUrl;location.replace(someUrl);。通过服务器端代码设置一个JavaScript标志来触发JavaScript,或者有条件地生成所需的JavaScript。通常我会将触发的JavaScript放在网页底部。

0

我相信你看到的行为是正确的。Response.Redirect是通过浏览器完成的。因此,当出现错误时,页面会被发布到浏览器,并且浏览器会触发重定向。重定向会导致Page_Load再次触发(这是ASP.NET中的标准流程)。

虽然您可以使用Server.Transfer来解决此问题,但我建议使用内置在ASP.NET中的错误重定向。有关可用内容以及如何使用它们的更多信息,请参见this page


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接