Как использовать общий _ViewStart в областях? - PullRequest
62 голосов
/ 05 ноября 2010

В моей «корневой» папке Views у меня есть _ViewStart со следующим кодом:

@Code
    Layout = "~/Views/Shared/_Layout.vbhtml"
End COde

В моей папке Area / Public / Views у меня есть копия моего _ViewStart из корневой папки Views..

Но когда я запускаю код, я получаю эту ошибку:

Unable to cast object of type 'ASP._ViewStart_vbhtml' to type 'System.Web.WebPages.StartPage'.

Не знаю, что я делаю не так?

Можно ли использовать один _ViewStart.vbhtmlдля моих областей тоже?

Как я могу использовать _ViewStart.vbhtml в областях?

Ответы [ 3 ]

51 голосов
/ 05 ноября 2010

Вам необходимо скопировать файл ~\Views\Web.config (или хотя бы следующие элементы конфигурации) в View Web.Config вашего региона:

<configSections>
  <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  </sectionGroup>
</configSections>

<system.web.webPages.razor>
  <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  <pages pageBaseType="System.Web.Mvc.WebViewPage">
    <namespaces>
      <add namespace="System.Web.Mvc" />
      <add namespace="System.Web.Mvc.Ajax" />
      <add namespace="System.Web.Mvc.Html" />
      <add namespace="System.Web.Routing" />
    </namespaces>
  </pages>
</system.web.webPages.razor>
34 голосов
/ 14 января 2011

Когда я столкнулся с этой проблемой, я сначала столкнулся с этим ответом, но то, что я действительно хотел, было на http://stevescodingblog.co.uk/asp-net-mvc-3rc-areas-viewstart/.

Суть проблемы в том, что _ViewStart. ** html имеет область действия. Он будет применяться к любым представлениям, которые находятся на том же уровне или в подпапках под ним. Поэтому, если вы переместите его в базовый каталог (например, рядом с файлом Global.asax), он будет применяться ко всем представлениям в ~ / Views / * и ко всем представлениям в ~ / Areas / * / Views / *.

Подобно принятому ответу, вам все равно придется скопировать разделы <system.web.webPages.razor> и <sectionGroup name="system.web.webPages.razor"..>. Поместите их в базовый файл web.config (в корне проекта).

Вот более полное руководство .

Для бонусных баллов вы можете изменить настройки _ViewStart. ** html, создав новый файл ближе к рассматриваемому виду (например, файл ~ / Views / _ViewStart.cshtml перезапишет ~ / _ViewStart.cshtml для всех представлений в каталог ~ / Views /).

0 голосов
/ 06 февраля 2015

Я обнаружил, что перемещение _ViewStart в корневой каталог и добавление раздела system.web.webPages.razor в корневой веб-конфигурацию работает, однако мне также нужно было добавить ряд строк, похожих на эту << add namespace = "Ico.Logics.Web.Areas.Admin.Models "/ >> к скопированному разделу.

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