关于ASP.NET MVC中Response.Redirect和RedirectToAction的BUG (跳转后继续执行后面代码而不结束进程)以及处理方法
2018-03-22 14:31
901 查看
关于ASP.NET MVC中Response.Redirect和RedirectToAction的BUG (跳转后继续执行后面代码而不结束进程)以及处理方法
在传统的ASP.NET中,使用Response.Redirect("")可以直接对页面进行转向,并且结束当前进程,不再往下执行.
但是在MVC中不知是微软有意而为之还是就是一个BUG(例如@Html.DropDownList 的Name BUG),当使用Response.Redirect进行页面转向的时候并不会中断当前页面执行,这很不符合预期,并会产生难以预期的后果,即使参数加上true也一样无效.
public ActionResult RedirectError() { if (true)//比如这里是登陆验证通过了,要转到后台主页了 { Response.Redirect("http://www.chengchenxu.com", true); } int a = 7 - 7; int b = 7 / a; //制造一个运行时异常,访问此页面会直接产生异常,并且难以跳转. return View(); }
以上代码如果在一个Action中,访问时和预期不符,会继续执行而产生异常,并不会发生跳转,这不得不说是一个BUG.
现在我们尝试用RedirectToAction()来试一下,结果还是一样
解决方法如下,创建一个EmpeyResult然后返回就可以了,代码如下:
if (true)//比如这里是登陆验证通过了,要转到后台主页了 { Response.Redirect("http://www.chengchenxu.com", true); EmptyResult er = new EmptyResult(); return View(er); } int a = 7 - 7; int b = 7 / a; //制造一个运行时异常,访问此页面会直接产生异常,并且难以跳转. return View();
这样的话就没有问题了,不知道是不是我的用法不对还是其他什么问题,按照常理来说执行完跳转动作之后就应该中断当前页面而去执行新的页面,MVC中这个地方让人摸不着头脑,好在有解决方法,并且比较简单.
示例代码下载:
ChengChenXu.com.RedirectTest.rar
本文为博主原创,转载请保留出处:
http://www.chengchenxu.com/Article/17/redirect
用这个可以直接跳出 支持(1)反对(0) 回复引用 #2楼[楼主] 2018-03-07 16:55 程晨旭 可以,谢谢提醒. 支持(0)反对(0) 回复引用 #3楼 2018-03-07 17:05 大漠孤阳 mark
相关文章推荐
- ASP.NET MVC- 在Area里使用RedirectToAction跳转出错的解决方法
- asp.net MVC 之 Controller.RedirectToAction 方法 详解
- 了解ASP.NET MVC几种ActionResult的本质:HttpStatusCodeResult & RedirectResult/RedirectToRouteResult
- asp.net mvc中在Filter中跳转千万不要使用Response.Redirect[转]
- ASP.NET MVC网站中 return RedirectToAction()形式参数的传递与接收
- 【MVC 过滤器的应用】ASP.NET MVC 如何统计 Action 方法的执行时间
- asp.net MVC 找不到Action 时的处理方法
- asp.net mvc OnActionExecuting 方法重写后的执行顺序
- 了解ASP.NET MVC几种ActionResult的本质:HttpStatusCodeResult & RedirectResult/RedirectToRouteResult
- 关于ASP.NET中调用Excel组件不能结束进程的解决方法
- 关于ASP.NET中调用Excel组件不能结束进程的解决方法
- 了解ASP.NET MVC几种ActionResult的本质:HttpStatusCodeResult & RedirectResult/RedirectToRouteResult
- asp.net mvc中在Filter中跳转千万不要使用Response.Redirect
- 关于linux asp.net MVC网站中 httpHandlers配置无效的处理方法
- 关于$.post()没有执行完,就执行后面代码的处理方法
- Asp.Net MVC:return View()、return View("Login")、return Login()、return RedirectToAction("Login") 的区别
- 了解ASP.NET MVC几种ActionResult的本质:HttpStatusCodeResult & RedirectResult/RedirectToRouteResult
- 关于ASP.NET MVC框架的代码提示汉化实现方法
- ASP.NET 关于Response.Redirect()方法的使用
- mvc中用response.redirect跳转后,后续代码还会执行的问题