net mvc cshtml asp c# asp.net-mvc razor c#-6.0

c# - mvc - ¿Interpolación de cadenas en una vista Razor?



razor if conditional (2)

¿Esto es compatible?

Si es así, ¿hay algún truco para habilitarlo? ¿Asumo que Razor no está usando un compilador lo suficientemente nuevo ...? El IDE VS2015 parece estar bien con él, pero en tiempo de ejecución estoy obteniendo

CS1056: Carácter inesperado ''$''


  1. Ejecute el siguiente comando en la Package Manager Console para agregar un proveedor de CodeDom requerido a su proyecto. También modifica su archivo web.config automática para agregar CodeDom requiere configuración.

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  1. Reinicie Visual Studio

Nota: Como @Jake mencionó en su comentario en esta respuesta, si ya tiene el paquete DotNetCompilerPlatform , intente actualizarlo.


Actualización :

A partir de Visual Studio 2015 Update 1, hay un proceso simple en la GUI para seguir los pasos a continuación. Simplemente haga clic derecho en su proyecto web y seleccione "Habilitar C # 6 / VB 14". Hay más información disponible en la publicación del blog de MSDN, " Nueva función para habilitar C # 6 / VB 14 ".

Desde que se escribió esta respuesta, esta funcionalidad se ha agregado con la ayuda de un paquete NuGet.

Agregue este paquete Nuget a su solución si está utilizando MVC5.

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

El paquete nuget debería modificar su web.config, pero verifique que la siguiente configuración esté en su archivo web.config (y si no está, agréguelo):

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

En MVC6, esto está incorporado.

Respuesta original:

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

Esto solo funciona en C # 6 con MVC6. Incluso si está ejecutando MVC5 con el compilador C # 6, no funcionará.

El truco es que el analizador de afeitar aún no es lo suficientemente inteligente como para reconocer algunas sintaxis, por lo que debe envolver todo entre paréntesis (también debe hacer esto cuando usa el operador condicional nulo ( ?. ) En sus vistas de afeitadora).

Dicho esto, la interpolación de cadenas en Razor es un poco defectuosa en este momento en MVC6, por lo que no me sorprendería si hubiera algunos problemas con ella. si se abordarán o no es otro asunto.