2016-04-28 41 views
2

我正在考虑在ASP.NET Core MVC应用程序中组织我的代码的最佳做法。我有两种类型的用户,医生和护士,最好的做法是在控制器/视图文件夹内的医生和护士子文件夹中组织我所有的医生和护士控制器/视图吗?在子文件夹中组织控制器和视图 - 最佳实践

控制器:

  • 控制器/医生/ HomeController.cs
  • 控制器/护士/ HomeController.cs

浏览:

  • 查看/医生/首页/索引.cshtml &其他查看文件
  • 查看/护士/主页/ Index.cshtml &其他视图文件

这样做的原因是因为每个医生/护士子文件夹级我想有自己的共享文件夹中的文件_viewstart的。

  1. 对这种情况有更好的最佳实践吗?
  2. 另外,在我的控制器中,如何到达子文件夹级别 查看文件? ,我发现的唯一方法是显式地指定他们:
public string Index() 
{ 
    return View("~/Views/Doctors/Home/Index.cshtml"); 
} 
  • 如果我想我的默认路由去 医生/ HomeController中/索引页我如何在我的startup.cs文件中指定默认的 路由。它似乎没有工作。
  • app.UseMvc(routes => 
    { 
        routes.MapRoute(
         name: "default", 
         template: "Doctors/{controller=Home}/{action=Index}/{id?}"); 
    }); 
    
  • 最后,如我曾提到,我希望有一个不同 _ViewStart.cshtml对于每个子文件夹。这工作/是否可以接受?
  • +2

    我还没有机会还与核心MVC的东西玩。它是否取消了区域的概念? –

    +0

    @CraigW。感谢这个建议,我会用我的解决方案进行更新 – Reza

    回答

    5

    非常感谢@Craig W.提供的区域。与旧版本的MVC不同,使用Core时,右键单击项目时没有正式的“区域”选项。但是,您可以创建一个文件夹并将其命名为“区域”。在控制器内,您可以使用[Area(“Doctors”)]修饰每个控制器,以指定区域内的控制器。

    至于startup.cs,我可以使用以下命令:

    app.UseMvc(routes => 
    { 
        routes.MapRoute(
         name: "areaRoute", 
         template: "{area:exists}/{controller}/{action}"); 
    
    
        routes.MapRoute(
         name: "default", 
         template: "{area=Doctors}/{controller=Home}/{action=Index}"); 
    });