我有一个actionfilter,我在ASP.NET MVC 2中运行OnActionExecuting。本质上我希望actionfilter清理我的数据并替换当前模型(将传递给后续的动作过滤器以及我的动作方法)消毒模型。这是可能的,这是一个坏主意 - 如果是这样的原因?
提前谢谢你, JP
答案 0 :(得分:6)
如果您需要处理模型,您可能会在单个Controller的范围内处理更多(除非所有控制器使用相同的模型类型?)。另一种方法是覆盖控制器本身的OnActionExecuting()
和OnActionExecuted()
方法。这使您可以将业务逻辑保持在控制器范围内。
通常,ActionFilters用于横切关注 - 您希望为许多操作方法运行,无论它们在应用程序中的位置如何。因此,除非您的模型清理逻辑适用于许多控制器和操作,或者非常通用(也许是,在这种情况下您的方法可能很好),您可能希望将其从过滤器中带出并进入控制器。如果它可以广泛应用,那么ActionFilter就可以了。
答案 1 :(得分:6)
这是MVC v1,我希望在v2中没有改变:
var view = filterContext.Result as ViewResultBase;
if (view != null)
view.ViewData.Model ...
我不明白你为什么要在OnActionExecuting中这样做,但是如果你必须,那么在那里做,并设置一些标记(私有字段)OnActionExecuted必须调整生成的模型。但是你必须使用后者,除非你指定.Result - 在这种情况下你的动作根本不会被调用,并且将使用分配的结果。
答案 2 :(得分:2)
filterContext.Controller.ViewData.Model