我试图找出适当的位置来拦截ASP.Net MVC 2中正在调用的视图+控制器的分辨率。我有一种情况,我有一个控制器和一组相应的视图。我也有可能定制版本的控制器和位于项目中的N个视图(或者我们可以使用类似于MvcContrib项目中的Portable Views)。如果控制器或视图的自定义版本在运行时存在,并且用户满足某些条件,则需要调用自定义控制器并使用适当的自定义视图。在设计/编译时,我们不知道可能有哪些自定义。
我的第一次尝试是使用自定义控制器工厂返回自定义控制器(如果存在)。但是,此控制器已“连接”到标准视图,如果它也存在,我无法弄清楚如何返回自定义视图。
更复杂的是,可能没有自定义控制器而是自定义视图,反之亦然。
答案 0 :(得分:2)
听起来你走在正确的轨道上。您已经有了自定义控制器选择逻辑,但您还需要具有自定义视图选择逻辑。
您可以覆盖并扩展默认ViewEngine
以插入使用您自己的逻辑来查找视图位置的应用。 Here's a good walkthrough of a simple ViewEngine就是这样做的。