我有一个.aspx表单,其中我有一个组合框保存主题我从DB表中检索。
点击提交按钮,在网格视图中查看与该主题相关的问题。
我是通过在按钮点击事件中调用函数FillGrid()来实现的。
我还对我的gridview进行了pageindexchanging,其中再次调用了FillGrid()。
在我的FillGrid()函数中,我使用了try catch块。如果发生错误,我想使用Response.Redirect()将页面重定向到错误页面。问题是这个response.redirect无效。其中一个原因是,在按钮点击时,表单会被发布两次。因为在到达response.redirect语句流后返回按钮单击FillGrid被调用的地方()。
我该如何解决这个问题?或简单地说,如何防止双重发布表单?
答案 0 :(得分:6)
例如,您需要关联index.aspx
。
所以你写这个:
Response.Redirect("index.aspx", true);
但Response.redirect
无效。现在转到设计视图选择要设置的按钮Response.redirect
,然后按 F4 将打开按钮属性,然后您需要找到PostBackUrl
选项,然后找到您的URL你想要的。
看到这张图片:
答案 1 :(得分:3)
嗯,这样做......
Response.Redirect("~/err.aspx", false);
HttpContext.Current.ApplicationInstance.CompleteRequest();
现在原始页面不会回发到浏览器,您将被重定向到新页面。
Response.Redirect("~/err.aspx", true);
的问题是以这种方式形成异常,这可能会将控件发送到catch块。
•另一种方式当然是Server.Transfer()但我不认为你想要那样。
答案 2 :(得分:1)
试试这个:
Response.Redirect("url");
Response.End;
答案 3 :(得分:1)
我遇到了完全相同的问题。由于内容页面的母版页有错误,重定向无效。 这是示例代码:
FormsAuthentication.SetAuthCookie(loginUserDetail.UserName, false);
Response.Redirect(FormsAuthentication.DefaultUrl, false);
FormsAuthentication.DefaultUrl值为“/membersarea/wellcome.aspx”,而wellcome.aspx有一个名为Site.master的母版页。
Site.master有javascript错误,因此Response.Redirect命令无效。
答案 4 :(得分:0)
我相信你所看到的行为是正确的。 response.redirect通过浏览器完成。因此,当您收到错误时,页面将发布到浏览器,浏览器会触发重定向。重定向导致page_load再次触发(这是ASP.NET中的标准流程)。
虽然您可以使用Server.Transfer来解决这个问题,但我建议您使用ASP.NET内置的错误重定向。有关可用内容和使用方法的详细信息,请参阅this page。
答案 5 :(得分:0)
对我来说,重定向问题与我的web.config文件有关。在该文件中,明确允许访问每个页面。在为新页面添加代码块后,我将重定向到web.config文件中,重定向成功了。希望如果有人遇到类似的问题,可以节省他们的时间,并且不会像我一样浪费大部分时间。
在web.config文件中,我添加了如下代码块:
<location path="sitedirectory/yournewpage.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>