web-dev-qa-db-fra.com

Interpolation de chaîne dans une vue Razor?

Est-ce pris en charge?

Si oui, y a-t-il un truc pour l'activer? Je suppose que Razor n'utilise pas un nouveau compilateur ...? Le VS2015 IDE semble bien me convenir mais au moment de l'exécution, j'obtiens

CS1056: caractère inattendu '$'

87
Tim Schmidt

Mise à jour :

À partir de Visual Studio 2015 Update 1, l'interface graphique comporte un processus simple permettant d'effectuer les étapes ci-dessous à votre place. Cliquez simplement sur votre projet Web avec le bouton droit de la souris et sélectionnez "Activer C # 6/VB 14". Plus d'informations sont disponibles sur le blog MSDN, " Nouvelle fonctionnalité permettant d'activer C # 6/= VB 14 ".

Depuis que cette réponse a été écrite, cette fonctionnalité a été ajoutée à l’aide d’un package NuGet.

Ajoutez ce package Nuget à votre solution si vous utilisez MVC5.

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/

Le paquet de nuget devrait modifier votre web.config, mais vérifiez que la configuration suivante est bien dans votre fichier web.config (et si ce n'est pas le cas, ajoutez-le dedans):

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

Dans MVC6, cela est intégré.


Réponse originale:

<div>
    @($"Hello {this.Model.SomeProperty}")
</div>

Cela ne fonctionne qu'en C # 6 avec MVC6. Même si vous utilisez MVC5 avec le compilateur C # 6, cela ne fonctionnera pas.

Le truc, c’est que l’analyseur de rasoir n’est pas encore assez intelligent pour reconnaître certaines syntaxes. Vous devez donc tout placer entre parenthèses (vous devez le faire lorsque vous utilisez l’opérateur null-conditionnel (?.) dans vos vues de rasoir également).

Cela dit, l’interpolation des chaînes dans Razor est n peu bogué pour le moment dans MVC6, aussi je ne serais pas surpris qu’il y ait des problèmes avec cela. savoir si elles seront ou non traitées est un autre problème.

117
vcsjones
  1. Run la commande suivante dans votre Package Manager Console pour ajouter un fournisseur requis CodeDom à votre projet. Cela modifie également votre web.config le fichier ajoute automatiquement CodeDom nécessite des réglages.

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform


  1. Redémarrer le Visual Studio

Note: Comme @ Jake mentionné dans son commentaire sous cette réponse, si vous avez déjà le paquet DotNetCompilerPlatform, Alors essayez de le mettre à jour.

12
RAM