Asp.net mvc 在MVC区域,如何将控制器与外部项目分离

Asp.net mvc 在MVC区域,如何将控制器与外部项目分离,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,我有一个要求,我需要在MVC项目之外分离控制器。我的情况是,我在MVC项目中有3个区域,我将每个区域内的所有控制器取出,放入单独的项目中,将所有视图保留在该区域内。我不知道如何做到这一点。如果有人遇到这个问题,请分享你的TOT和代码 谢谢。您可以在同一个解决方案中创建两个项目 第一个项目将是MVC4项目,其中包含视图、脚本、css和区域。(MyProject.PresentationLayer) 第二个项目是解决方案中的类库,它可以包含控制器和模型等代码。(MyProject.logicaly

我有一个要求,我需要在MVC项目之外分离控制器。我的情况是,我在MVC项目中有3个区域,我将每个区域内的所有控制器取出,放入单独的项目中,将所有视图保留在该区域内。我不知道如何做到这一点。如果有人遇到这个问题,请分享你的TOT和代码


谢谢。

您可以在同一个解决方案中创建两个项目

  • 第一个项目将是MVC4项目,其中包含视图、脚本、css和区域。(MyProject.PresentationLayer)
  • 第二个项目是解决方案中的类库,它可以包含控制器和模型等代码。(MyProject.logicalyer)
使用Visual Studio,MyProject.PresentationLayer需要将引用添加到MyProject.LogicLayer。这可以通过右键单击解决方案资源管理器中的引用并单击MyProject.LogicLayer旁边的解决方案/项目上的复选框来完成


现在,您应该能够在MyProject.LogicLayer中编写代码,并正常引用MyProject.PresentationLayer中的代码。

谢谢大家,经过一番搜索,我找到了答案,而且非常简单。 如果您的应用程序中有更多区域,并且您只想将控制器取出到不同的项目中。正如Jerode所说,Dll引用也可以,但是当有区域时,相同的控制器名称可以出现在不同的区域中,所以我们需要更多的调整,在区域注册部分,我们需要指定项目的名称空间

public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "AreaName_default",
            "Areaname/{controller}/{action}/{id}",
            new { controller = "controller", action = "Create", id = UrlParameter.Optional },
             new[] { "NameSpaceOfControllerAreaWhichSeparated"}
        );

    }

就像在每个区域内一样,你需要添加相应分离项目的名称空间

是的,这是基本的,但在我的例子中,我有三个不同的区域,因此它可能在不同的区域中具有相同的控制器名称。因此,如果我将其分离为3 MyProject.logicalyer,路由将如何工作。好的,感谢您提供更多关于这方面的内容,并跟进您的路由答案。