mvc 3 бритвенный движок с использованием представлений по умолчанию - PullRequest
0 голосов
/ 18 февраля 2011

Я использую Razor для нового проекта в моей компании, и я играю с ним в течение 2 дней и уже обнаружил странное поведение imho.

У меня есть домашний контроллер в корне моего веб-приложения и домашний контроллер в области, назовите его Area1. В обоих этих контроллерах у меня есть действие Index, и поэтому я получил представление Index в корневой папке Views, а другое - в папке Area1 \ Views. Если я удаляю индексное представление внутри области, поэтому Area1 \ Views \ Index.cshtml и запрашиваю Area1 \ Home \ Index, я не получаю сообщение о том, что механизм просмотра не находит представление для этого действия, а "base "Представление индекса находится в \ Views \ Index.cshtml и отображается.

Кто-то знает, если это ошибка или это сделано по назначению? Если так, есть ли способ отключить это значение по умолчанию?

1 Ответ

1 голос
/ 18 февраля 2011

Определенно НЕ ошибка.

Такое поведение позволяет легко использовать шаблоны View, например, для обработки ошибок.

Поведение по умолчанию для ASP.NET MVC таково: если вы делаете ...:

return View();

... он ищет шаблон представления с именем действия для использования в нескольких местах: папка соглашения об именах по умолчанию для контроллера, т.е. / Area1 / Views / Home /, затем / Area1 / Views / Shared / затем Area1 / Views / then / Views / Shared / then / Views /

Если он не находит такой View, соответствующей названию действия, он выдает ошибку.

Так много для поведения по умолчанию. Чтобы «настроить» это поведение, вам нужно сделать следующее:

В действиях вашего контроллера вы можете указать имя шаблона представления, которое будет использоваться при возвращении. EG:

return View("MyOtherView");

или еще лучше, если используется T4MVC:

return View(MVC.Area1.Home.Views.MyOtherView);  // does away with "magic" strings

В результате я не вижу необходимости отключать поведение по умолчанию, чтобы иметь возможность делать (что угодно), что вы хотите. Контроллеры предназначены для управления тем, какие представления используются для отображения пользователю. Это лучшая практика.

Однако ASP.NET MVC очень настраиваемый, поэтому, я полагаю, есть способы и средства для его отключения.

Если вы хотите это сделать, удачи вам, но гораздо разумнее следовать стандартным настройкам и понять, как работает ASP.NET MVC, особенно если вы новичок.

Примечание:

Вышесказанное относится к ASP.NET MVC 1, 2, 3 и будет действовать в дальнейшем. Это поведение по умолчанию для всех движков View, включая Razor и WebForm Views.

PS:

И вы можете настроить URL-адреса с помощью регистрации маршрута, если вас интересует внешний вид URL-адреса в браузере пользователя.

...