我在经典的ASP和ASP.NET webforms中使用response.redirect。然而,使用MVC 2.0,我遇到了一些奇怪的东西。
我在控制器类中有一个私有方法,由多个控制器方法使用来帮助加载和验证一些信息。此私有方法设置为如果发现问题到通用错误消息页面重定向。
我注意到的大问题是,调用控制器类和页面视图尝试完成呈现和加载之前重定向实际发生。这是令人讨厌的开发,因为视图抛出异常,我需要忽略,在我的通用错误页面最终加载。
如上所述,我习惯了旧版本的response.redirect,它阻止了页面上的后续代码被执行,因为新的页面将被加载。
任何帮助或建议在重定向在MVC将非常感谢。
解决方法
ASP.Net MVC中的常规重定向机制是返回一个RedirectResult类型的对象到客户端。如果这在调用View方法之前完成,您的视图方法将永远不会被调用。
如果你自己调用Response.Redirect,而不是让Asp.Net MVC的前端控制器为你做,你的控制器方法将继续,直到它完成或抛出异常。
您的问题的惯用解决方案是让您的私有方法返回您的控制器可以使用的结果。
例如:
public ActionResult Edit(MyEntity entity) { if (!IsValid()) return Redirect("/oops/"); ... return View(); } private bool IsValid() { if (nozzle==NozzleState.Closed) return false; if (!hoseAttached) return false; return (userRole==Role.Gardener); }