修改ActionFilter中的模型

时间:2010-01-12 04:31:20

标签: asp.net-mvc action-filter

我有一个actionfilter,我在ASP.NET MVC 2中运行OnActionExecuting。本质上我希望actionfilter清理我的数据并替换当前模型(将传递给后续的动作过滤器以及我的动作方法)消毒模型。这是可能的,这是一个坏主意 - 如果是这样的原因?

提前谢谢你, JP

3 个答案:

答案 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)

BTW,对于MVC 3& 4:

filterContext.Controller.ViewData.Model