Frage String-Interpolation in einer Razor-Ansicht?


Wird das unterstützt?

Wenn ja, gibt es einen Trick, um es zu aktivieren? Ich nehme an, dass Razor nicht einen neuen Compiler verwendet ...? Die VS2015 IDE scheint damit in Ordnung zu sein, aber zur Laufzeit bekomme ich

CS1056: Unerwartetes Zeichen '$'


76
2018-06-14 17:54


Ursprung


Antworten:


Aktualisieren:

Beginnend in Visual Studio 2015 Update 1 gibt es einen einfachen Prozess in der GUI, um die folgenden Schritte für Sie durchzuführen. Klicken Sie einfach mit der rechten Maustaste auf Ihr Webprojekt und wählen Sie "Enable C # 6 / VB 14". Weitere Informationen finden Sie im MSDN-Blogpost. "Neue Funktion zur Aktivierung von C # 6 / VB 14".

Seit dieser Antwort wurde diese Funktionalität mit Hilfe eines NuGet-Pakets hinzugefügt.

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

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

Das nugget-Paket sollte Ihre Datei "web.config" ändern, überprüfen Sie jedoch, ob sich die folgende Konfiguration in Ihrer Datei "web.config" befindet (und wenn sie nicht hinzugefügt wird):

  <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, wird es nicht funktionieren.

Der Trick ist, dass der Rasiermesser-Parser nicht intelligent genug ist, um einige Syntaxen noch zu erkennen, also müssen Sie die ganze Sache in Klammern verpacken (Sie müssen dies tun, wenn Sie den Null-bedingten Operator (?.) in Ihren Rasiermesseransichten auch).

Das heißt, String-Interpolation in Razor ist ein bisschen buggy im Moment in MVC6, also wäre ich nicht überrascht, wenn es einige Probleme mit ihm geben würde. ob sie angesprochen werden oder nicht, ist eine andere Sache.


103
2018-06-14 18:13



  1. Lauf der folgende Befehl in Ihrem Package Manager Console ein Muss hinzufügen CodeDom Anbieter für Ihr Projekt. Es ändert auch Ihre web.config Datei automatisch hinzufügen CodeDom erfordern Einstellungen dazu.

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform


  1. Neustart das Visual Studio

Hinweis: Wie @Jake erwähnt in seinem Kommentar unter dieser Antwort, wenn Sie haben DotNetCompilerPlatform Paket bereits, also versuche es zu aktualisieren.


9
2017-09-18 02:17