El nuevo operador null-condicional en ASP.NET Navaja MVC


Así que desde que salió C # 6.0, he estado usando el operador condicional nulo bastante. Ejemplo:

Model?.Person?.Zip

Sin embargo, ahora tengo una situación en la que tengo una solución en la que el cliente opera en modelos de dominio en la vista. Si bien cazaría al desarrollador con un hacha, me resulta más fácil hacer algunas comprobaciones nulas en la vista.

Sin embargo, cuando voy esto en Navaja:

@Model?.Person?.Zip

Mi Model? es visto como dinámico, pero ? rompe las cosas dinámicas y el resto se representa como texto.

¿Cómo se resuelve esto?

Author: Lars Holdgaard, 2015-10-16

3 answers

Solo una conjetura

@(Model?.Person?.Zip)
 60
Author: Dieter B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-16 13:29:18

Para alguna completitud adicional (trabajo en el ASP.NET equipo de Microsoft):

Como Dieter B (y algunos otros) notan correctamente, @(Model?.Person?.Zip) funcionará.

La sintaxis @(...) se puede considerar como una "sintaxis de escape" que permite mucha más flexibilidad en términos de qué código se analizará como la expresión.

Cuando se construyó la versión actual de Razor, solo existía C# 5, por lo que las nuevas sintaxis de C# 6 no eran compatibles directamente.

El ASP.NET el equipo está mirando hacia atrás-port algunos de los Razor v4 (utilizado en ASP.NET 5 / MVC 6) soporte para C # 6 volver a Razor v3 (utilizado en ASP.NET 4.x / MVC 5).

 17
Author: Eilon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-16 16:32:43

Esto también puede suceder cuando faltan uno o ambos de los siguientes paquetes NuGet del proyecto:

  • Microsoft.CodeDom.Proveedor.DotNetCompilerPlatform
  • Microsoft.Net.Compilers
 1
Author: sunrunner20,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-06 17:04:05