2013-02-18 7 views
4

Кто-нибудь знает, есть ли причина, по которой _ViewStart.cshtml не будет получен с помощью Custom ViewEngine в MVC 3?_ViewStart не используется после Custom ViewEngine

My Views теперь живут в

~ \ UI \ Views \

~ \ UI \ Views \ Shared \

с ViewStart быть на ~ \ UI \ Views_ViewStart.cshtml.

Я очистил существующий RazorViewEngine и заменил его моим в global.asax, и все представления разрешены правильно, за исключением того, что ни одна из страниц макета не применяется, если я не укажу его отдельно в каждом представлении.

Мой код двигателя Формат Путь:

 this.ViewLocationFormats = new[] 
             { 
              "~/UI/Views/{1}/{0}.cshtml", 
              "~/UI/Views/Shared/{0}.cshtml" 
             }; 

     this.PartialViewLocationFormats = new[] 
               { 
                "~/UI/Views/Shared/{0}.cshtml", 
                "~/UI/Views/Shared/Partial/{0}.cshtml", 
                "~/UI/Views/{1}/Partial/{0}.cshtml" 
               }; 

     this.AreaMasterLocationFormats = new[] 
              { 
               "~/UI/Views/Admin/Shared/{0}.cshtml" 
              }; 

     this.AreaPartialViewLocationFormats = new[] 
                { 
                 "~/UI/Views/Admin/Shared/{0}.cshtml", 
                 "~/UI/Views/Admin/Shared/Partial/{0}.cshtml" 
                }; 

     this.AreaViewLocationFormats = new[] { "~/UI/Views/Admin/{1}/{0}.cshtml" }; 

    this.MasterLocationFormats = new[] 
    { 
     "~/UI/Views/{1}/{0}.cshtml", 
     "~/UI/Views/Shared/{0}.cshtml" 
    }; 

Спасибо заранее, Скотт

+0

Эти виды в своей области? –

+0

Есть базовые виды, а затем я устанавливаю образец области администрирования, которую я зарегистрировал. Я попытался вывести Район, чтобы проверить, не исправит ли он его, но это не похоже. _ViewStart.cshtml не работает ни для одного из видов. – Scott

+1

Естественно, оказался просто явным недосмотром ... oops! Я привел ответ ниже к моей проблеме. – Scott

ответ

2

Глупость выиграл в этот раз, к сожалению. Я основывал свой пользовательский ViewEngine на некотором коде, на который я ссылался из статьи. Внутри статьи они детализировали переопределение для CreateView. У одного из логических параметров (runViewStartPages) установлено значение false, но поскольку это не был именованный аргумент, я пропустил его.

public class XyzViewEngine : RazorViewEngine 
{  
    protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath) 
    { 
     return new RazorView(
      controllerContext, 
      viewPath, 
      masterPath, 
      true, //<--- this drives whether to use _ViewStart pages. It was set to false 
      FileExtensions, 
      ViewPageActivator 
     ); 
    } 
}