2016-11-17 73 views
1

我们已经有了一个在ASP.NET MVC上运行的企业应用程序。我们最近开始修改应用程序的完整用户界面。现在,当我说用户界面,它不是简单的CSS,我可以放在一个单独的文件夹中并动态加载。基本上,完整的导航结构,布局元素,一切都正在改进。但是,整体代码(控制器,模型)与这里和那里的一些小改进保持几乎相同。现在,我们应该推出改进后的用户界面,但同时也支持并行的旧用户界面。前端版本化ASP.Net MVC

目标是运行新的用户界面,如appURL/v2/其余视图url保持不变。

现在,我们的目标是我们不应该将控制器,模型复制到另一个项目中。

那么,根据/v2/ URL中的版本标识符,在整个应用程序中为全局服务不同视图的最佳方法是什么?

回答

2

使用相同控制器可以使用不同视图的区域。所以你创建了自己的意见,“V2”区域,并请求路由到“V2”因此:

routes.MapRoute(
    "v2_default", 
    "v2/{controller}/{action}/{id}", 
    new { area = "v2", controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    namespaces: new string[] { "YourNamespace.Controllers" } 
    ); 

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { area = "", controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    namespaces: new string[] { "YourNamespace.Controllers" } 
    ); 

使用这种结构,两条路线将寻找在同一个命名空间中的控制器。

+0

控制器和操作是相同的,但我如何定义它需要从v2区域获取视图,而无需更改每个操作中的代码并将if/else视图。 – Vikram

+1

@Vikram视图应根据路由值的区域进行解析。所以如果你通过'/ v2'请求一个动作,那么应该为这个动作访问'Areas/v2/Views'目录。 – CodeCaster

+0

试过了,问题在于它期望控制器和操作也被定义在“/ v2”区域中。如果v2中没有控制器,则会引发404错误。任何想法,我如何将通用控制器与v2区域视图混合? – Vikram