Можно ли чередовать два механизма просмотра MVC при поиске представлений? - PullRequest
1 голос
/ 22 октября 2011

Я использую движки представлений WebForms и Razor в своем проекте MVC.Они прекрасно работают вместе.Однако у меня настроен проект на основе наследования, так что у меня есть несколько дочерних проектов, полученных из базового проекта.С помощью только одного механизма просмотра это работает так, что MVC будет искать представление в дочерних проектах, и, не найдя его, будет искать базу.

Однако при добавлении второго механизма просмотра этот поискшаблон нарушен, так что механизм WebForms ищет дочерний элемент, а затем базу, а затем механизм Razor ищет дочерний элемент, а затем базу.Таким образом, базовое представление .aspx будет иметь приоритет над дочерним представлением .cshtml.Другими словами, при поиске представления с именем MyView это список приоритетов поиска:

Child\MyView.aspx
Base\MyView.aspx
Child\MyView.cshtml
Base\MyView.cshtml

Я хочу, чтобы каждый из двух механизмов проверял дочерние проекты перед проверкой базового проекта., как таковой:

Child\MyView.aspx
Child\MyView.cshtml
Base\MyView.aspx
Base\MyView.cshtml

Возможно ли это, и если да, может ли кто-нибудь указать мне правильное направление?

1 Ответ

0 голосов
/ 31 октября 2011

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

public InterleavedViewEngine : IViewEngine
{
    public string[] SearchLocations;

    RazorViewEngine _razor;
    WebFormsViewEngine _webForms;

    public override ViewEngineResult FindView(...)
    {
        //iterate search paths, trying Razor, then WebForms, etc...
        foreach(var location in SearchLocations)
        {
            var razorResult = _razor.FindView(...);

            if(razorResult.View == null)
            {
               //web forms, etc... here
            }

        }
    }

}
...