【问题标题】:Organizing controllers and views in subfolders - best practice在子文件夹中组织控制器和视图 - 最佳实践
【发布时间】:2019-07-24 21:05:30
【问题描述】:

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

控制器:

  • Controllers/Doctors/HomeController.cs
  • Controllers/Nurses/HomeController.cs

观看次数:

  • Views/Doctors/Home/Index.cshtml 和其他查看文件
  • Views/Nurses/Home/Index.cshtml 和其他查看文件

这是因为在每个 Doctors/Nurses 子文件夹级别,我都希望拥有自己的共享文件夹来存放 _viewstart 文件。

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

【问题讨论】:

  • 我还没有机会使用 Core MVC 的东西。是否取消了区域的概念?
  • @CraigW。感谢您的建议,我将更新我的解决方案

标签: asp.net-core asp.net-core-mvc


【解决方案1】:

非常感谢@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}");
});

【讨论】:

  • 您能详细解释一下吗?项目树 + 控制器代码 + 视图树到底是什么样的?
  • 当时可能是这种情况,但现在可以在visual studio中使用。右键单击项目 > 添加 > 新建脚手架项目。
【解决方案2】:

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

    public IActionResult Index()
    {
        return View("~/Views/Doctors/Index.cshtml");
    }

【讨论】:

  • 虽然您的代码可能会提供问题的答案,但请在其周围添加上下文,以便其他人了解它的作用以及它存在的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 2011-06-05
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多