如何在区域中使用常见的_ViewStart?

时间:2010-11-05 19:09:10

标签: asp.net-mvc vb.net razor

在我的“root”Views文件夹中,我有一个带有以下代码的_ViewStart:

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

在我的Area / Public / Views文件夹中,我有一个来自根Views文件夹的_ViewStart副本。

但是当我运行代码时,我收到了这个错误:

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

我不知道我做错了什么?

我可以在我的区域使用一个_ViewStart.vbhtml吗?

如何在区域中使用_ViewStart.vbhtml

3 个答案:

答案 0 :(得分:51)

您需要将~\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>

答案 1 :(得分:34)

当我遇到这个问题时,我首先遇到了这个问题,但我真正想要的是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文件中(在项目的根目录中)。

这是more complete tutorial

对于奖励积分,您可以通过创建一个更接近相关视图的新文件来覆盖_ViewStart。** html设置(例如,文件〜/ Views / _ViewStart.cshtml将覆盖所有视图的〜/ _ViewStart.cshtml 〜/ Views /目录)。

答案 2 :(得分:0)

我发现将_ViewStart移动到root并将system.web.webPages.razor部分添加到根web配置工作,但是我还需要添加一些类似于此的行   &LT;&LT; add namespace =&#34; Ico.Logics.Web.Areas.Admin.Models&#34; /&GT;&GT; 到复制的部分。