【问题标题】:How do I use a common _ViewStart in areas?如何在区域中使用常见的 _ViewStart?
【发布时间】:2011-05-05 18:49:13
【问题描述】:

在我的“根”视图文件夹中,我有一个带有以下代码的 _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

【问题讨论】:

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


    【解决方案1】:

    我发现将 _ViewStart 移动到根目录并将 system.web.webPages.razor 部分添加到根 web 配置是可行的,但是我还需要添加许多与此类似的行 > 到复制的部分。

    【讨论】:

      【解决方案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 文件中(在项目的根目录中)。

      这是more complete tutorial

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

      【讨论】:

      • 我遇到了与 MojoDK 相同的问题。一旦我将 _ViewStart 文件移动到根目录,我就会收到此错误。我在每个 web.config 中都有这两个部分,包括根(在运行时子部分下 - 其他任何地方,它不会让我调试)。还有什么可以设置的吗?
      • 刚来,很好的答案,@havok 我发现我们也必须把这个 appSettings 放在一起: 应用设置>
      • 如果在执行上述所有操作后仍然出现“cast”错误,则可能是由于缓存了 _ViewStart.cshtml。只需打开文件并执行一些操作来更改时间戳,以便重新编译。这为我解决了问题。
      • 为什么它不能驻留在 Views 文件夹之外?在什么情况下它不起作用?我刚刚添加了第二个源,它有一个更完整的教程和一个示例项目的链接,它在工作中展示了它。
      • 你说“喜欢接受的答案(...)”,但实际上接受的答案描述了相反的过程 - 复制 web.config 部分 来自 ~/views 到 /Area/SomeArea/Views。我花了好几分钟才发现我做错了。
      【解决方案3】:

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

      【讨论】:

      • 哇,谢谢伙计!我自己永远不会找到这个解决方案。谢谢你花时间帮助我,你刚刚救了我最后三根头发。 :) 再次感谢!!!
      • 很高兴我能帮上忙。我们正在考虑使此错误消息更智能,以便指出问题所在。
      猜你喜欢
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2012-02-16
      • 2023-03-23
      相关资源
      最近更新 更多