你能跨两个项目拆分MVC区域吗?

时间:2013-06-11 08:22:51

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-areas

我有一个用VB.Net编写的Asp.Net MVC 3网站。我们希望迁移到C#,计划是在C#中编写所有新代码,并在修改时重写旧代码。

我在解决方案中创建了一个新的C#MVC 3项目。在这个项目中,我使用Razor Generator来帮助将视图编译到生成的程序集中。我从VB引用了C#项目。 VB项目作为主站点运行。

此设置效果很好90%。但是,如果VB项目中已存在某个区域,我似乎无法在C#项目中扩展它。似乎整个区域必须存在于一个项目或另一个项目中。

有谁知道是否可以从2个项目中提供1个区域?

2 个答案:

答案 0 :(得分:0)

我必须通过在VB.Net项目的区域注册中创建一条路线来解决这个问题。

需要删除C#项目中的区域注册文件,VB.Net项目中的路由使用略有不同的URL模式。在创建新路由时,需要设置C#控制器所在的命名空间。新路线也需要在该区域的默认路线之前声明。

答案 1 :(得分:0)

这是完全可能的,你正在做的是正确的。我猜想你的路线没有正确设置。您必须在VB项目的路由中指定名称空间。

在您的AreaRegistration代码中:

Public Overrides Sub RegisterArea(ByVal context As AreaRegistrationContext)
    context.MapRoute(
        "Users_default",
        "Users/{controller}/{action}/{id}",
        New With {.action = "Index", .id = UrlParameter.Optional},
        New String() {"MyCompany.MyAmazingCSProject.Areas.Users.Controllers", 
                      Me.GetType().Namespace}
    )
End Sub

记住 VB命名空间增加了根命名空间的复杂性,它与C#项目的默认命名空间的工作方式不同,所以如果你同时使用它们,则需要保持一致。

<强>即 根名称空间为MyCompany.MyAmazingVBProject的VB项目在代码中具有此命名空间:

Namespace Areas.Users.Controllers

映射到MyCompany.MyAmazingVBProject.Areas.Users.Controllers,而C#中的等效命名空间将具有以下代码:

namespace MyCompany.MyAmazingCSProject.Areas.Users.Controllers { ... }