Как использовать общий _ViewStart в областях?
В моей папке "root" 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
в областях?
Ответы
Ответ 1
Вам нужно скопировать файл ~\Views\Web.config
(или, по крайней мере, следующие элементы конфигурации) в свой веб-просмотр Area.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>
Ответ 2
Когда я столкнулся с этой проблемой, я сначала наткнулся на этот ответ, но то, что я действительно хотел, было http://stevescodingblog.co.uk/asp-net-mvc-3rc-areas-viewstart/.
Суть проблемы заключается в том, что _ViewStart. ** html имеет область видимости. Он будет применяться ко всем представлениям, которые находятся на том же уровне или в подпапках под ним. Поэтому, если вы переместите его в базовый каталог (например, рядом с файлом Global.asax), он будет применяться ко всем представлениям под ~/Views/* и всеми видами в ~/Areas/*/Просмотры/*.
Как и в принятом ответе, вам все равно придется копировать разделы <system.web.webPages.razor>
и <sectionGroup name="system.web.webPages.razor"..>
. Поместите их в свой базовый файл web.config(в корень проекта).
Здесь более полное руководство.
Для бонусных точек вы можете переопределить настройки _ViewStart. ** html, создав новый файл ближе к рассматриваемому представлению (например, файл ~/Views/_ViewStart.cshtml перезапишет ~/_ViewStart.cshtml для всех просмотров в каталог ~/Views/).
Ответ 3
Я обнаружил, что перемещение _ViewStart в корневой каталог и добавление раздела system.web.webPages.razor в корневую веб-конфигурацию работало, однако мне также нужно было добавить ряд строк, подобных этому & Л; < add namespace = "Ico.Logics.Web.Areas.Admin.Models" / → в скопированный раздел.