日期:2014-05-17  浏览次数:20359 次

请问MVC中能否只设计一个虚拟controller来应对多个页面View?
我是这样想的,设计一个柔性构架的网站系统,系统只负责后台构架的搭建,前台各种view由客户自己随意设计,而无需修改后台代码。涉及数据交互的部分,设计成各个公共的PartialView,用户在需要的时候,通过@Html.Action就可以调用了。

比如这种结构:
Controllers/CommonController.cs
各种对页面的直接请求都放入这个Controller去处理,并根据请求动态返回所需的View。
比如:
/blog/index
/blog/entry/23
/product/index
/product/entry/11
......
这些的请求都由CommonController处理,但是对于上面请求分别返回:
/blog/index.cshtml
/blog/entry.cshtml
/product/index.cshtml
/product/entry.cshtml
.......

上面的CommonController不进行数据操作,仅仅根据请求返回恰当的View即可。


然后,上面这些请求页面中,如果涉及到需要操作数据库的,都通过调用对应的PartialView来实现,各种功能型PartialView,设计为系统内置的功能,用户只管调用,比如:

Controllers/Plugin/EntryController.cs
Controllers/Plugin/CategoryController.cs
.....
这些Controller就只实现数据操作,然会恰当的PartialView,用户需要调用这些内置功能的时候,就这样:@Html.Action(“Category”)。


现在的问题是:如何设计这样一个虚拟公用CommonController,让其可以应对所有的请求,并返回合适的View?欢迎讨论,谢谢。
MVC

------解决方案--------------------
既然里面包含了不同的逻辑,建议你还是写多个控制器,反正路由写起来很简单
如果重复代码比较多的话,就提取成基类

当然如果你非要写成一个的话,就用Controller.HandleUnknownAction这个方法

        protected override void HandleUnknownAction(string actionName)
        {
             return View(actionName).ExecuteResult(this.ControllerContext);
        }