我正在使用几种操作方法处理ASP.NET MVC控制器,所有这些操作方法都需要相同的数据。此数据需要只能使用路由值进行查找(因此,我无法在构造函数中执行查找)。我确信这已经详细讨论过,但我还没有找到令人满意的建议。
获取此数据的最佳方法是什么,而不是在每个操作方法中重复自己?我正在努力:
创建一个动作过滤器,这似乎是最好的选择,但是我在哪里存储对象,在动作参数中?是否适合在动作过滤器中创建ViewModel对象并将其直接传递给动作方法,以便填写ViewModel对象的其余部分?
创建一个子动作(Html.RenderAction)来渲染这些数据,但这需要第二组查找,因为子动作需要另一个实例化控制器的完整周期。
在每个操作方法中调用的辅助方法/属性。
关于最佳方法的想法或意见?
答案 0 :(得分:1)
过滤器可能是您最好的选择,您可以将对象存储在ViewData中。
另一个选项(不是更好的选项)是创建自己的控制器基类,它覆盖ExecuteCore方法并在那里进行查找。
我这样做是为了记录,因为我想记录每个页面视图,我不想为我制作的每个控制器添加一个过滤器。在mvc 3中,有一种方法可以声明全局过滤器,也可以解决这个问题。
答案 1 :(得分:1)
好的,所以考虑到你告诉我的内容,我建议使用自定义的ModelBinder。
这是最适合这种情况的。我认为使用过滤器是错误的方法,因为过滤器的工作不是绑定数据 - 这是ModelBinder的工作。
HTHS,
查尔斯
编辑:我一直在考虑它,如果你应该使用模型粘合剂,我会有点撕裂。
我刚才提出的一般经验法则是,如果你需要动作本身内的ProjectDetails,使用ModelBinder,但如果你不需要动作中的ProjectDetails,使用ActionFilter只需将它添加到你的model / viewdata。
也许其他人可以扔掉他们的2c。
答案 2 :(得分:0)
您可以覆盖控制器中的OnActionExecuting()方法并获取数据。