Как мне заставить MVC заглянуть в папку Views внутри моей области, прежде чем заглядывать в папку Views без корня root? - PullRequest
0 голосов
/ 07 декабря 2018

Я использую ASP.NET MVC 5.2.6 в .NET Framework версии 4.5.2.

У меня есть область с именем Admin , в которой у меня есть следующее:

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

У меня также есть представление с именем New.cshtml в папке Admin Views \ Article области.

Areas\Admin\Views\Article\New.cshtml

Однако, когда я запускаю свое приложение, MVC ищет только в папке Views внутри моего корня без области.Исходя из моего прошлого опыта, он начинает искать в папке Views внутри области.

Это потому, что новая основанная на атрибутах маршрутизация MVC не знает, что я нахожусь внутри Admin область?

Я знаю, что мог, и я не хочу указывать полный путь к каждому виду, потому что это боль в шее.Мой вопрос не в том, куда мне идти отсюда сейчас?Это, как гласит заголовок, следующее:

Есть ли способ заставить его сначала искать виды в области?

1 Ответ

0 голосов
/ 07 декабря 2018

Святой курит!

Я наконец-то нашел решение своей проблемы.Вот что вы должны сделать, если столкнетесь с этой проблемой.

Убедитесь, что контроллеры в ваших областях находятся в пространстве имен, отличающемся от пространства имен контроллеров в корне без области.Это должно быть так, даже если имена контроллеров уникальны.Неважно, используете вы атрибутную маршрутизацию или нет.

Итак, если у вас есть корень без области, например:

Root

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

Область Foo

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

У вас будет такая же проблема.Измените его следующим образом, чтобы контроллеры области находились в пространстве имен, отдельном от корневого, и проблема исчезла.

Foo Area

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 содержит ссылку на видео , которое помогло мне решить мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...