¿Interpolación de cadenas en una vista de Razor?

93

¿Es esto compatible?

Si es así, ¿hay algún truco para habilitarlo? Supongo 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 '$'

Tim Schmidt
fuente
¿Puedes mostrar el código del que estás hablando?
Jeroen Vannevel
¿Qué ASP.NET está utilizando (ASP.NET 5: el nuevo integrado en .NET Core; o la actualización a ASP.NET 4)?
Richard
6
¿CÓMO ES ESTO OFF TOPIC?!?!?! Ridículo.
Josh M.
1
¡Gracias! Me alegro de que alguien más haya dicho eso. Me pareció muy útil y conozco personalmente a 2 personas que tuvieron el mismo problema con la misma solución. ¿Quién diablos está a cargo aquí de todos modos?
Tim Schmidt
@TimSchmidt La cola de cierre es larga, por lo que a veces las preguntas se cierran de forma inapropiada. Pero la cola de reapertura es corta, por lo que si realmente se debe reabrir, será bastante rápido.
o11c

Respuestas:

124

Actualización :

A partir de Visual Studio 2015 Update 1, hay un proceso simple en la GUI para realizar los pasos a continuación por usted. Simplemente haga clic con el botón derecho en su proyecto web y seleccione "Activar C # 6 / VB 14". Hay más información disponible en la publicación del blog de MSDN, " Nueva característica 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 de 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 lo 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á integrado.


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 razor no es lo suficientemente inteligente como para reconocer algunas sintaxis todavía, por lo que debe envolver todo entre paréntesis (debe hacer esto cuando use el operador condicional nulo ( ?.) en sus vistas de razor también).

Dicho esto, la interpolación de cadenas en Razor tiene un poco de errores 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.

vcsjones
fuente
Ah, bingo, estaba usando MVC 5. ¡Gracias!
Tim Schmidt
5
MVC 5.2.3 funciona, solo tiene que agregar el paquete dom de código rosyln para asp.net. Vea esta respuesta en una pregunta no cerrada: stackoverflow.com/a/31548221/637783
jbtule
1
por cierto vs actualizó el error y ahora digo que c # 6 no es compatible, lo cual es mejor
CMS
1
Incluso después de instalar este paquete NuGet que también actualizó Web.Config, sigo recibiendo el siguiente mensaje de error como información sobre herramientas: "La función 'operador de propagación nula' no está disponible en C # 5. Utilice la versión de idioma 6 o superior".
Super Coder
1
No tenía la opción "Habilitar C # 6 / VB 14" en el menú contextual. Pero lo tenía en Visual Studio, menú Proyecto, así que lo habilité desde allí. Gracias.
HasanG
14
  1. Ejecute el siguiente comando en la Consola del Administrador de paquetes para agregar un CodeDomproveedor requerido a su proyecto. Modificará su web.configarchivo automáticamente para agregarle la CodeDomconfiguración requerida.

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  2. Reiniciar Visual Studio

Nota: Como @Jake mencionó en su comentario debajo de esta respuesta, si ya tiene el DotNetCompilerPlatformpaquete, es posible que solo necesite actualizarlo.

RAM
fuente
Ésta es la solución correcta hoy. De la descripción de 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
Para mi escenario, ya tenía este paquete, pero era la versión 1.0.5. La actualización a 1.0.8 resolvió el problema.
Jake
Reiniciar Visual Studio no fue necesario para mí.
Johnathan Barclay
@JohnathanBarclay el reinicio fue necesario en mi caso. Creo que es seguro asumir que será necesario para algunas personas.
Loudenvier