Mise à niveau manuelle de MVC3 vers MVC4 Beta et obtention d'erreurs de signe «non valide @»

StackOverflow https://stackoverflow.com/questions/9399664

  •  29-10-2019
  •  | 
  •  

Question

J'utilise Razor dans les deux

Toute page utilisant le signe @.C'est presque comme si les System.Web.WebPages ou System.Web.Helpers ne sont pas en mesure de déterminer les vues

Voici l'erreur réelle:

"@" n'est pas valide au début d'un bloc de code.Seuls les identifiants, mots clés, commentaires, "(" et "{" sont valides.

Voici mon web.config qui se trouve dans le dossier / Views

<?xml version="1.0"?>

<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.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=4.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>

<appSettings>
<add key="webpages:Enabled" value="false" />
</appSettings>

<system.web>
<httpHandlers>
  <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>

<!--
    Enabling request validation in view pages would cause validation to occur
    after the input has already been processed by the controller. By default
    MVC performs request validation before a controller processes the input.
    To change this behavior apply the ValidateInputAttribute to a
    controller or action.
-->
<pages
      validateRequest="false"
      pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
      pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
      userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <controls>
    <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
  </controls>
</pages>
</system.web>

<system.webServer>
<validation validateIntegratedModeConfiguration="false" />

<handlers>
  <remove name="BlockViewHandler"/>
  <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
</configuration>
Était-ce utile?

La solution 2

Il s'est avéré que le passage à la version bêta de MVC4 ne permettait pas de gérer correctement les échappements @@@

J'ai un client Twitter où il affichera le nom d'écran d'une personne dans une vue comme celle-ci:

@@@TwitterUsername

Cela rendra un @ avec le @@ échappé, puis le nom Twitter avec @TwitterUsername

Cela ne fonctionne pas avec MVC4.J'ai donc dû changer pour cela et cela a bien fonctionné:

@Html.Raw("@")@TwitterUsername

Pas aussi joli, mais ça marche.
Y a-t-il quelque chose qui ne va pas avec l'analyse de Razor sur MVC4 ou est-ce que je ne fais pas quelque chose de bien en l'implémentant?

Le résultat de ceci est:

@jordanshane

Autres conseils

Reportez-vous à MVC 4 ReleaseNote

Il existe une section décrivant la Mise à niveau d'un projet ASP.NET MVC 3 vers ASP.NET MVC 4

J'ai eu un problème similaire lors de la mise à niveau de MVC3 vers MVC4 lors de la sortie d'une «page» qui est un vidage Excel au format XML Excel.Par exemple, j'avais la ligne suivante dans mon fichier de mise en page XML:

Ne fonctionne pas :

<NumberFormat ss:Format="m/d/yyyy;@@"/>

L'analyseur m'a donné l'erreur suivante:

Message d'erreur de l'analyseur: "" /> "n'est pas valide au début d'un bloc de code. Seuls les identifiants, mots-clés, commentaires," ("et" {"sont valides.

La réponse Html.Raw ("@") a fonctionné pour moi, et je n'ai pas été en mesure de trouver facilement une raison à ce comportement dans les liens fournis par plusieurs autres réponses.Au cas où quelqu'un chercherait une solution plus concise, voici une autre possibilité:

Fonctionne :

<NumberFormat ss:Format="m/d/yyyy;@('@')"/>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top