String-Interpolation in einer Razor-Ansicht?


93

Wird das unterstützt?

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

CS1056: Unerwartetes Zeichen '$'


Können Sie den Code anzeigen, über den Sie sprechen?
Jeroen Vannevel

Welches ASP.NET verwenden Sie (ASP.NET 5: das neue, das auf .NET Core basiert, oder das Update auf ASP.NET 4)?
Richard

6
WIE IST DAS OFF THEMA?!?!?! Lächerlich.
Josh M.

1
Danke dir! Ich bin froh, dass das jemand anderes gesagt hat. Ich fand es ziemlich hilfreich und kenne persönlich 2 Leute, die das gleiche Problem mit der gleichen Lösung hatten. Wer zum Teufel ist hier überhaupt verantwortlich?
Tim Schmidt

@TimSchmidt Die Warteschlange zum Schließen ist lang, daher werden Fragen manchmal unangemessen geschlossen. Die Wiedereröffnungswarteschlange ist jedoch kurz. Wenn sie also wirklich wieder geöffnet werden sollte, ist sie ziemlich schnell.
o11c

Antworten:


124

Update :

Ab Visual Studio 2015 Update 1 gibt es in der GUI einen einfachen Vorgang, um die folgenden Schritte für Sie auszuführen. Klicken Sie einfach mit der rechten Maustaste auf Ihr Webprojekt und wählen Sie "C # 6 / VB 14 aktivieren". 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 mithilfe 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 Nuget-Paket sollte Ihre web.config ändern, überprü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. Sie müssen das Ganze daher in Klammern setzen (dies müssen Sie tun, wenn Sie den nullbedingten Operator ( ?.) auch in Ihren Rasiereransichten verwenden).

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


Ah, Bingo, ich habe MVC 5 verwendet. Danke!
Tim Schmidt

5
MVC 5.2.3 funktioniert, Sie müssen nur das rosyln code dom-Paket für asp.net hinzufügen. Sehen Sie diese Antwort in einer nicht geschlossenen Frage: stackoverflow.com/a/31548221/637783
jbtule

1
Übrigens vs aktualisiert den Fehler und jetzt sage ich, dass c # 6 nicht unterstützt wird, was besser ist
CMS

1
Selbst nach der Installation dieses NuGet-Pakets, das auch die Web.Config aktualisiert hat, wird weiterhin die folgende Fehlermeldung als Tooltipp angezeigt: "Die Funktion 'Null-Propagierungsoperator' ist in C # 5 nicht verfügbar. Bitte verwenden Sie die Sprachversion 6 oder höher."
Super Coder

1
Ich hatte keine Option "C # 6 / VB 14 aktivieren" im Kontextmenü. Aber ich hatte es in Visual Studio, Projektmenü, also habe ich es von dort aus aktiviert. Vielen Dank.
HasanG

14
  1. Führen Sie den folgenden Befehl in der Package Manager-Konsole aus , um einen erforderlichen Befehl hinzuzufügenCodeDom Ihrem Projekt Anbieter . Ihre web.configDatei wird automatisch geändert, um die CodeDomerforderlichen Einstellungen hinzuzufügen .

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  2. Neustart Visual Studio

Hinweis: Wie @Jake in seinem Kommentar unter dieser Antwort erwähnt hat, muss das DotNetCompilerPlatformPaket möglicherweise nur aktualisiert werden , wenn Sie es bereits haben .


Dies ist heute die richtige Lösung. Aus der Beschreibung von 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
Für mein Szenario hatte ich dieses Paket bereits, aber es war Version 1.0.5. Das Update auf 1.0.8 hat das Problem behoben.
Jake

Ein Neustart von Visual Studio war für mich nicht erforderlich.
Johnathan Barclay

@ JohnathanBarclay der Neustart war in meinem Fall notwendig. Ich denke, es ist sicher anzunehmen, dass es für einige Leute notwendig sein wird.
Loudenvier
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.