Cra*_*ker 10 asp.net-mvc controller
我的一些控制器操作具有一组标准的故障处理行为.一般来说,我想:
这些步骤是如此标准化,我希望有可重用的代码来实现该行为.
我目前的攻击计划是使用辅助方法来执行以下操作:
public static ActionResult HandleMyObject(this Controller controller,
Func<MyObject,ActionResult> onSuccess) {
var myObject = MyObject.LoadFrom(controller.RouteData).
if ( myObject == null ) return NotFound(controller);
if ( myObject.IsNotAllowed(controller.User)) return NotAllowed(controller);
return onSuccess(myObject);
}
# NotAllowed() is pretty much the same as this
public static NotFound(Controller controller){
controller.HttpContext.Response.StatusCode = 404
# NotFound.aspx is a shared view.
ViewResult result = controller.View("NotFound");
return result;
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是Controller.View()是一个受保护的方法,因此无法从帮助程序访问.我已经看过明确地创建一个新的ViewResult实例,但是有足够的属性来设置我在不知道陷阱的情况下这么做是很谨慎.
从特定控制器外部创建ViewResult的最佳方法是什么?
刚刚阅读这篇文章,因为我从动作过滤器中遇到了同样的问题.我的解决方案是明确地创建视图操作.这基于受MVC源的受保护View()方法,因此它应填充所需的属性.无论如何,似乎没有问题.
public static NotFound(Controller controller){
controller.HttpContext.Response.StatusCode = 404;
ViewResult result = new ViewResult {
ViewName = "NotFound",
ViewData = controller.ViewData,
TempData = controller.TempData
};
return result;
}
Run Code Online (Sandbox Code Playgroud)
有点晚了,但这对我有用.
| 归档时间: |
|
| 查看次数: |
9798 次 |
| 最近记录: |