Как ASP.NET MVC осуществляет арбитраж между двумя одноименными представлениями (aspx и razor)? - PullRequest
4 голосов
/ 18 января 2011

Используя ASP.NET MVC3, я создал новое представление Razor и присвоил ему то же имя, что и существующее представление .aspx, которое я использовал.Я заметил, что контроллер продолжал получать представление .aspx (которое имеет то же имя, что и действие), что в значительной степени соответствует ожиданиям.Затем я переименовал представление .aspx, и действие подняло представление бритвы .cshtml.

Так что, если у меня есть два представления с именами myview.aspx и myview.cshtml, и действие с именем MyView (), которое выполняет возвратное представление (), он получит представление myview.aspx и вернет его.

Как MVC3 решил, какой тип представления по умолчанию использовать?Есть ли способ изменить это поведение по умолчанию, чтобы предпочесть бритву над .aspx?

Ответы [ 2 ]

4 голосов
/ 18 января 2011

Все сводится к порядку двигателей представления в коллекции ViewEngines.Engines.Вот как выглядит статический конструктор ViewEngines (как видно из Reflector в ASP.NET MVC 3 RTM):

static ViewEngines()
{
    ViewEngineCollection engines = new ViewEngineCollection();
    engines.Add(new WebFormViewEngine());
    engines.Add(new RazorViewEngine());
    _engines = engines;
}

, который объясняет, почему WebForms является предпочтительным механизмом представления.1008 *

Таким образом, вы можете выполнить следующий гротескный хак в Application_Start, чтобы изменить предпочтение Razor: -)

var aspxVe = ViewEngines.Engines[0];
var razorVe = ViewEngines.Engines[1];
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(razorVe);
ViewEngines.Engines.Add(aspxVe);
1 голос
/ 18 января 2011

Я хотел бы представить себе порядок, в котором регистрируются движки представления.Ранее зарегистрированные движки просмотра будут опрошены в первую очередь.Если вы хотите изменить заказ:

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