在查看无区域根目录的Views文件夹之前,如何使MVC首先查看我所在区域的Views文件夹?

时间:2018-12-07 06:21:39

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

我正在.NET Framework 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();
    }
  }
}

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

Areas\Admin\Views\Article\New.cshtml

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

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

我知道我可以并且我不想为每种视图提供完整的路径,因为这很麻烦。我的问题不是,我现在从这里去哪里?如标题所示,它是:

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

1 个答案:

答案 0 :(得分:1)

圣烟!

我终于找到了解决我问题的方法。如果遇到此问题,这就是您必须执行的操作。

确保您所在区域中的控制器位于与无区域根目录中的控制器的命名空间不同的命名空间中。即使控制器名称是唯一的,也应该这样。是否使用属性路由都没关系。

因此,如果您具有这样的无面积根:

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不能t解析我的控制器和操作并报告404。

  2. deleted answer中的@lawphotog有指向a video的链接,可以帮助我解决问题。