web-dev-qa-db-fra.com

Comment utiliser un _ViewStart commun dans certaines zones?

Dans mon dossier Vues "racine", j'ai un _ViewStart avec le code suivant:

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

Dans mon dossier Zone/Public/Vues, ​​j'ai une copie de mon _ViewStart à partir du dossier Vues racine.

Mais lorsque j'exécute le code, j'obtiens cette erreur:

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

Je ne sais pas ce que je fais mal?

Puis-je en utiliser un _ViewStart.vbhtml pour mes régions aussi?

Comment puis-je utiliser _ViewStart.vbhtml Dans les zones?

64
MojoDK

Vous devez copier le ~\Views\Web.config fichier (ou au moins les éléments de configuration suivants) dans View Web.Config de votre zone:

<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

Lorsque j'ai rencontré ce problème, j'ai d'abord rencontré cette réponse, mais ce que je voulais vraiment, c'était sur http://stevescodingblog.co.uk/asp-net-mvc-3rc-areas-viewstart/ .

L'essentiel du problème est que _ViewStart. ** html a une portée. Il s'appliquera à toutes les vues qui sont au même niveau ou dans des sous-dossiers en dessous. Par conséquent, si vous le déplacez vers le répertoire de base (par exemple à côté du fichier Global.asax), il s'appliquera à toutes les vues sous ~/Views/* et toutes les vues sous ~/Zones/*/Vues/*.

Comme pour la réponse acceptée, vous devrez toujours copier le <system.web.webPages.razor> et <sectionGroup name="system.web.webPages.razor"..> sections. Placez-les dans votre fichier web.config de base (à la racine du projet).

Voici un tutoriel plus complet .

Pour les points bonus, vous pouvez remplacer les paramètres _ViewStart. ** html en créant un nouveau fichier plus proche de la vue en question (par exemple, le fichier ~/Views/_ViewStart.cshtml écrasera ~/_ViewStart.cshtml pour toutes les vues dans le ~/Vues/répertoire).

34
frank hadder

J'ai trouvé que le déplacement de _ViewStart vers la racine et l'ajout de la section system.web.webPages.razor à la configuration Web racine fonctionnaient, mais j'ai également dû ajouter un certain nombre de lignes similaires à ceci << add namespace = "Ico.Logics.Web .Areas.Admin.Models "/ >> dans la section copiée.

0
Robert Taylor