Interpolation de chaîne dans une vue Razor?

93

Est-ce pris en charge?

Si oui, y a-t-il une astuce pour l'activer? Je suppose que Razor n'utilise pas un compilateur assez récent ...? L'IDE VS2015 semble bien fonctionner, mais au moment de l'exécution, je reçois

CS1056: caractère inattendu '$'

Tim Schmidt
la source
Pouvez-vous montrer le code dont vous parlez?
Jeroen Vannevel le
Quel ASP.NET utilisez-vous (ASP.NET 5: le nouveau basé sur .NET Core; ou la mise à jour vers ASP.NET 4)?
Richard
6
COMMENT EST CE SUJET HORS SUJET?!?!?! Ridicule.
Josh M.
1
Je vous remercie! Je suis content que quelqu'un d'autre ait dit cela. J'ai trouvé cela très utile et je connais personnellement 2 personnes qui ont eu le même problème avec la même solution. Qui diable est en charge ici de toute façon ??
Tim Schmidt
@TimSchmidt La file d'attente de fermeture est longue, donc parfois les questions sont fermées de manière inappropriée. Mais la file d'attente de réouverture est courte, donc si elle doit vraiment être rouverte, ce sera assez rapidement.
o11c

Réponses:

124

Mise à jour :

À partir de Visual Studio 2015 Update 1, il existe un processus simple dans l'interface graphique pour effectuer les étapes ci-dessous pour vous. Cliquez simplement avec le bouton droit de la souris sur votre projet Web et sélectionnez «Activer C # 6 / VB 14». Plus d'informations sont disponibles sur le billet de blog MSDN, " Nouvelle fonctionnalité pour 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 package nuget devrait modifier votre web.config, mais vérifiez que la configuration suivante est dans votre fichier web.config (et si ce n'est pas le cas):

  <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, c'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 exécutez MVC5 avec le compilateur C # 6, cela ne fonctionnera pas.

L'astuce est que l'analyseur de rasoir n'est pas encore assez intelligent pour reconnaître certaines syntaxes, vous devez donc mettre le tout entre parenthèses (vous devez également le faire lorsque vous utilisez l'opérateur conditionnel nul ( ?.) dans vos vues de rasoir).

Cela dit, l'interpolation de chaîne dans Razor est un peu boguée pour le moment dans MVC6, donc je ne serais pas surpris s'il y avait des problèmes avec cela. si oui ou non ils seront traités est une autre question.

vcsjones
la source
Ah, bingo, j'utilisais MVC 5. Merci!
Tim Schmidt
5
MVC 5.2.3 fonctionne, il vous suffit d'ajouter le package rosyln code dom pour asp.net. Voir cette réponse dans une question non fermée: stackoverflow.com/a/31548221/637783
jbtule
1
en passant vs mis à jour l'erreur et maintenant je dis que c # 6 n'est pas pris en charge, ce qui est mieux
CMS
1
Même après avoir installé ce package NuGet qui a également mis à jour Web.Config, je reçois toujours le message d'erreur suivant sous forme d'info-bulle: «La fonctionnalité 'opérateur de propagation nul' n'est pas disponible en C # 5. Veuillez utiliser la version linguistique 6 ou supérieure.»
Super Coder
1
Je n'avais pas l'option "Activer C # 6 / VB 14" dans le menu contextuel. Mais je l'avais dans Visual Studio, dans le menu Projet, je l'ai donc activé à partir de là. Merci.
HasanG
14
  1. Exécutez la commande suivante dans la console du gestionnaire de package pour ajouter un CodeDomfournisseur requis à votre projet. Il modifiera web.configautomatiquement votre fichier pour y ajouter CodeDomles paramètres requis.

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  2. Redémarrer Visual Studio

Remarque: comme @Jake l'a mentionné dans son commentaire sous cette réponse, si vous avez DotNetCompilerPlatformdéjà le paquet, il peut simplement avoir besoin d'être mis à jour.

RAM
la source
C'est la bonne solution aujourd'hui. De la description de Microsoft: Replacement CodeDOM providers that use the new .NET Compiler Platform ("Roslyn") compiler as a service APIs. This provides support for new language features in systems using CodeDOM (e.g. ASP.NET runtime compilation) as well as improving the compilation performance of these systems.
Luis Ferrao
1
Pour mon scénario, j'avais déjà ce package, mais c'était la version 1.0.5. La mise à jour vers 1.0.8 a résolu le problème.
Jake
Le redémarrage de Visual Studio n'était pas nécessaire pour moi.
Johnathan Barclay
@JohnathanBarclay le redémarrage était nécessaire dans mon cas. Je pense qu'il est prudent de supposer que cela sera nécessaire pour certaines personnes.
Loudenvier