在子文件夹中组织控制器和视图 - 最佳实践

Rez*_*eza 2 asp.net-core-mvc asp.net-core

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

控制器:

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

浏览次数:

  • Views/Doctors/Home/Index.cshtml和其他View文件
  • 意见/护士/主页/ Index.cshtml和其他查看文件

原因是因为在每个Doctors/Nurses子文件夹级别,我想拥有自己的_viewstart文件的共享文件夹.

  1. 这种情况有更好的最佳做法吗?
  2. 此外,在我的控制器中,如何进入子文件夹级别查看文件?我找到的唯一方法是明确指定它们:
public string Index()
{
    return View("~/Views/Doctors/Home/Index.cshtml");
}
Run Code Online (Sandbox Code Playgroud)
  1. 如果我希望我的默认路由转到Doctors/HomeController/Index页面,这就是我在startup.cs文件中指定默认路由的方法.它似乎不起作用.
app.UseMvc(routes =>
{
    routes.MapRoute(
      name: "default",
      template: "Doctors/{controller=Home}/{action=Index}/{id?}");
});
Run Code Online (Sandbox Code Playgroud)
  1. 最后,正如我所提到的,我希望_ViewStart.cshtml每个子文件夹都有不同 的内容.这项工作是否可以接受?

Rez*_*eza 6

非常感谢@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}");
});
Run Code Online (Sandbox Code Playgroud)


Elv*_*erg 6

如果您希望将子文件夹用于视图或部分视图,则语法为

public IActionResult Index()
{
    return View("~/Views/Doctors/Index.cshtml");
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然您的代码可能会提供问题的答案,但请在其周围添加上下文,以便其他人了解它的作用以及原因。 (4认同)