webentwicklung-frage-antwort-db.com.de

String-Interpolation in einer Razor-Ansicht?

Wird das unterstützt?

Wenn ja, gibt es einen Trick, um es zu aktivieren? Ich gehe davon aus, dass Razor keinen neuen Compiler verwendet ...? Die VS2015 IDE scheint in Ordnung zu sein, aber zur Laufzeit bekomme ich

CS1056: Unerwartetes Zeichen '$'

87
Tim Schmidt

Update :

Ab Visual Studio 2015 Update 1 können Sie in der grafischen Benutzeroberfläche auf einfache Weise die folgenden Schritte ausführen. Klicken Sie einfach mit der rechten Maustaste auf Ihr Webprojekt und wählen Sie "C # 6 aktivieren/VB 14". Weitere Informationen finden Sie im MSDN-Blogbeitrag " Neue Funktion zum Aktivieren von C # 6/= VB 14 ".

Da diese Antwort geschrieben wurde, wurde diese Funktionalität mit Hilfe eines NuGet-Pakets hinzugefügt.

Fügen Sie dieser Lösung dieses Nuget-Paket hinzu, wenn Sie MVC5 verwenden.

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

Das Nuget-Paket sollte Ihre web.config ändern, prüfen Sie jedoch, ob die folgende Konfiguration in Ihrer web.config-Datei enthalten ist (und falls nicht, fügen Sie sie hinzu):

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

In MVC6 ist dies integriert.


Ursprüngliche Antwort:

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

Dies funktioniert nur in C # 6 mit MVC6. Selbst wenn Sie MVC5 mit dem C # 6-Compiler ausführen, funktioniert dies nicht.

Der Trick ist, dass der Rasierer-Parser noch nicht intelligent genug ist, um einige Syntaxen zu erkennen. Daher müssen Sie das Ganze in Klammern setzen (dies müssen Sie tun, wenn Sie den null-bedingten Operator (?.) auch in deinen Rasiereransichten).

Allerdings ist die String-Interpolation in Razor etwas fehlerhaft im Moment in MVC6, daher wäre ich nicht überrascht, wenn es einige Probleme damit gäbe. ob sie angesprochen werden oder nicht, ist eine andere Sache.

117
vcsjones
  1. Run der folgende Befehl in Ihrem Package Manager Console um einen erforderlichen CodeDom Provider zu Ihrem Projekt hinzuzufügen. Es ändert auch Ihre web.config Datei zum automatischen Hinzufügen von CodeDom erfordert Einstellungen.

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform


  1. Neustart das Visual Studio

Anmerkung: Wie @ Jake in seinem Kommentar unter dieser Antwort erwähnt, wenn Sie bereits ein DotNetCompilerPlatform -Paket haben, Also versuchen Sie es zu aktualisieren.

12
RAM