在ASP.Net MVC中拦截控制器/视图的分辨率以进行自定义的位置?

时间:2010-06-11 19:56:53

标签: asp.net asp.net-mvc

我试图找出适当的位置来拦截ASP.Net MVC 2中正在调用的视图+控制器的分辨率。我有一种情况,我有一个控制器和一组相应的视图。我也有可能定制版本的控制器和位于项目中的N个视图(或者我们可以使用类似于MvcContrib项目中的Portable Views)。如果控制器或视图的自定义版本在运行时存在,并且用户满足某些条件,则需要调用自定义控制器并使用适当的自定义视图。在设计/编译时,我们不知道可能有哪些自定义。

我的第一次尝试是使用自定义控制器工厂返回自定义控制器(如果存在)。但是,此控制器已“连接”到标准视图,如果它也存在,我无法弄清楚如何返回自定义视图。

更复杂的是,可能没有自定义控制器而是自定义视图,反之亦然。

1 个答案:

答案 0 :(得分:2)

听起来你走在正确的轨道上。您已经有了自定义控制器选择逻辑,但您还需要具有自定义视图选择逻辑。

您可以覆盖并扩展默认ViewEngine以插入使用您自己的逻辑来查找视图位置的应用。 Here's a good walkthrough of a simple ViewEngine就是这样做的。