首页 > 解决方案 > 在查看无区域根目录的 Views 文件夹之前,如何让 MVC 先查看我所在区域内的 Views 文件夹?

问题描述

我在 .NET 框架版本 4.5.2 上使用 ASP.NET MVC 5.2.6。

我有一个名为Admin的区域,其中有以下内容:

namespace MyCode.Controllers
{
  [RoutePrefix("admin/article")]
  public class ArticleController : Controller
  {
    [Route("new")]
    public ActionResult New()
    {
      return View();
    }
  }
}

我在管理区域的Views\Article文件夹中还有一个名为New.cshtml的视图。

Areas\Admin\Views\Article\New.cshtml

但是,当我运行我的应用程序时,MVC 只在我的无区域根目录中查看 Views文件夹。根据我过去的经验,它开始查看该区域内的Views文件夹。

是因为 MVC 不知道我在管理区域内的基于新属性的路由吗?

我知道我可以而且我不想提供每个视图的完整路径,因为那是一件令人头疼的事情。我的问题不是,我现在从这里去哪里?正如标题所说,它是以下内容:

有没有办法告诉它先在该地区寻找风景?

标签: asp.net-mvcasp.net-mvc-5

解决方案


圣烟!

我终于找到了解决我的问题的方法。如果您遇到此问题,请执行以下操作。

确保您区域中的控制器驻留在与无区域根中控制器的命名空间不同的命名空间中。即使控制器名称是唯一的,也应该如此。是否使用属性路由并不重要。

所以,如果你有一个像这样的无面积根:

namespace MyCode.Controllers
{
  public class HomeController : Controller
  {
  }
}

富区

namespace MyCode.Controllers
{
  [RoutePrefix("whatever/it/doesnt/matter")]
  public class FooController : Controller
  {
  }
}

你会遇到同样的问题。像下面这样更改它,使该区域的控制器驻留在与根目录不同的命名空间中,问题就会消失。

富区

namespace MyCode.Areas.Foo.Controllers // or anything else other 
                                      // than the namespace where root controllers are
{
  [RoutePrefix("whatever/it/doesnt/matter")]
  public class FooController : Controller
  {
  }
}

这很可能是 ASP.NET MVC 源代码中的错误。

PS:

  1. 甚至RouteDebugger 都告诉我我的路由没有问题,它能够解析localhost:<port>/Admin/Article/New到正确控制器和操作的路径,但 ASP.NET MVC 无法解析我的控制器和操作并报告 404。

  2. 来自@lawphotog的已删除答案一个视频链接,该视频帮助我解决了我的问题。


推荐阅读