64 votes

Comment utiliser un _ViewStart commun dans les zones ?

Dans mon dossier "Root" Views, j'ai un _ViewStart avec le code suivant :

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

Dans mon dossier Area/Public/Views, j'ai une copie de mon _ViewStart du dossier Root Views.

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'.

Qu'est-ce que je fais de mal ?

Puis-je utiliser un _ViewStart.vbhtml pour mes zones aussi ?

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

51voto

marcind Points 38002

Vous devez copier le ~\Views\Web.config (ou au moins les éléments de configuration suivants) dans le fichier 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>

5 votes

Wow merci mec ! Je n'aurais jamais trouvé cette solution moi-même. Merci d'avoir pris le temps de m'aider, tu viens de me sauver de l'arrachage de mes trois derniers cheveux :) Merci encore ! !!

1 votes

Content d'avoir pu aider. Nous cherchons à rendre ce message d'erreur plus intelligent afin qu'il indique la nature du problème.

35voto

frank hadder Points 2988

Quand j'ai rencontré ce problème, je suis d'abord tombé sur 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'applique à toutes les vues qui se trouvent au même niveau ou dans des sous-dossiers inférieurs. Par conséquent, si vous le déplacez dans le répertoire de base (par exemple, à côté du fichier Global.asax), il s'appliquera à toutes les vues situées sous ~/Views/*. et toutes les vues sous ~/Areas/*/Views/*.

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

Voici un tutoriel plus complet .

Pour des points bonus, vous pouvez remplacer les paramètres de _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 du répertoire ~/Views/).

0 votes

J'ai le même problème que MojoDK. Dès que je déplace le fichier _ViewStart dans le répertoire racine, je reçois cette erreur. J'ai ces deux sections dans chaque web.config, y compris dans le répertoire racine (sous la sous-section runtime - ailleurs, je ne peux pas déboguer). Pourrait-il y avoir autre chose à configurer ?

2 votes

Je viens juste d'arriver, bonne réponse, @havok j'ai trouvé que nous devons mettre cet appSettings aussi : <appSettings> <add key="webpages:Enabled" value="false" /> </appSettings>

1 votes

Si vous obtenez toujours l'erreur "cast" après avoir fait tout ce qui précède, cela peut être dû à la mise en cache de _ViewStart.cshtml. Il suffit d'ouvrir le fichier et de faire quelque chose pour changer l'horodatage afin qu'il se recompile. Cela a réglé mon problème.

0voto

Robert Taylor Points 171

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X