web-dev-qa-db-ja.com

地域で共通の_ViewStartを使用するにはどうすればよいですか?

「ルート」ビューフォルダには、次のコードを含む_ViewStartがあります。

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

Area/Public/Viewsフォルダーには、ルートのViewフォルダーからの_ViewStartのコピーがあります。

しかし、コードを実行すると、次のエラーが表示されます。

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

私は間違っていることを知らないのですか?

自分のエリアにも1つの_ViewStart.vbhtmlを使用できますか?

エリアで_ViewStart.vbhtmlを使用するにはどうすればよいですか?

62
MojoDK

~\Views\Web.configファイル(または少なくとも以下の構成要素)をエリアのビュー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>
51
marcind

この問題に出くわしたとき、最初にこの答えに出くわしましたが、私が本当に欲しかったのは http://stevescodingblog.co.uk/asp-net-mvc-3rc-areas-viewstart/ でした。

問題の要点は、_ViewStart。** htmlにスコープがあることです。同じレベルまたはその下のサブフォルダーにあるすべてのビューに適用されます。したがって、ベースディレクトリ(たとえばGlobal.asaxファイルの隣)に移動すると、〜/ Views/*の下のすべてのビューに適用されますand〜/ Areas/* /の下のすべてのビュービュー/ *。

受け入れられた答えと同様に、<system.web.webPages.razor>および<sectionGroup name="system.web.webPages.razor"..>セクションをコピーする必要があります。それらをベースのweb.configファイル(プロジェクトのルート)に配置します。

詳細なチュートリアル です。

ボーナスポイントについては、問題のビューに近い新しいファイルを作成することにより、_ViewStart。** html設定をオーバーライドできます(たとえば、〜/ Views/_ViewStart.cshtmlファイルは〜/ _ViewStart.cshtmlを〜/ _ViewStart.cshtmlで上書きし、〜/ Views /ディレクトリ)。

34
frank hadder

_ViewStartをルートに移動し、system.web.webPages.razorセクションをルートWeb構成に追加することはできましたが、この<< add namespace = "Ico.Logics.Webに似た行を追加する必要もありました。 .Areas.Admin.Models "/ >>をコピーしたセクションに追加します。

0
Robert Taylor