2015-06-14 3 views
70

Wird dies unterstützt?String-Interpolation in einer Razor-Ansicht?

Wenn ja, gibt es einen Trick, es zu aktivieren? Ich nehme an, dass Razor nicht einen neuen Compiler verwendet ...? Das VS2015 IDE mit ihm in Ordnung zu sein scheint, aber zur Laufzeit erhalte ich

CS1056: Unerwartete Zeichen '$'

+0

Können Sie den Code zeigen Sie sprechen? –

+0

Welche ASP.NET verwenden Sie (ASP.NET 5: die neue auf .NET Core oder das Update auf ASP.NET 4)? – Richard

+4

WIE IST DIESES OFF-THEMA?!?!?! Lächerlich. –

Antwort

98

aktualisieren:

Ab Visual Studio 2015 Update 1, Es gibt 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 "New feature to enable C# 6/VB 14".

Seit diese Antwort geschrieben wurde, 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 nuget Paket web.config ändern sollte, aber überprüfen, ob die folgende Konfiguration in Ihrer web.config-Datei ist (und wenn sie es nicht fügen in):

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


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 schlau genug ist, um einige Syntaxen noch zu erkennen, also müssen Sie die ganze Sache in Klammern umbrechen (Sie müssen dies tun, wenn Sie den nullbedingten Operator (?.) in Ihren Rasiereransichten verwenden Gut).

Das gesagt, String-Interpolation in Razor ist a bit buggy im Moment in MVC6, so würde ich nicht überrascht sein, wenn es einige Probleme mit ihm gäbe. ob sie angesprochen werden oder nicht, ist eine andere Sache.

+0

Ah, Bingo, ich benutzte MVC 5. Danke! –

+5

MVC 5.2.3 funktioniert, müssen Sie nur den Rosyln Code DOM-Paket für asp.net hinzufügen. Siehe diese Antwort in einer nicht geschlossenen Frage: http://StackOverflow.com/A/31548221/637783 – jbtule

+1

übrigens vs. aktualisierte den Fehler und jetzt sagt ich, dass C# 6 nicht unterstützt wird, was besser ist – CMS

8
  1. Run der folgende Befehl in Ihrem Package Manager Console einen erforderlichen CodeDom Provider Projekt hinzuzufügen. Es ändert auch Ihre web.config Datei automatisch, um CodeDom Einstellungen dazu hinzuzufügen.

Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform 

  1. Restart die Visual Studio
+0

Dies ist die richtige Lösung heute. Von Microsofts Beschreibung: 'Replacement CodeDOM-Provider, die den neuen .NET Compiler Platform (" Roslyn ") - Compiler als Service-APIs verwenden. Dies bietet Unterstützung für neue Sprachfeatures in Systemen, die CodeDOM verwenden (z. B. ASP.NET-Laufzeitkompilierung) sowie die Kompilierungsleistung dieser Systeme. " –

+0

Für mein Szenario hatte ich dieses Paket bereits, aber es war Version 1.0.5. Aktualisierung auf 1.0.8 löste das Problem. – Jake

Verwandte Themen