¿Para qué es la syntax @ Html.DisplayFor?

Entiendo que en Razor, @Html tiene muchas cosas buenas, como generar HTML para enlaces, entradas, etc.

Pero no obtengo la función DisplayFor …

Por qué debería escribir:

@Html.DisplayFor(model => model.Title) 

cuando podría escribir:

 @Model.Title 

Html.DisplayFor() representará DisplayTemplate que coincida con el tipo de propiedad.

Si no puede encontrar ninguno, supongo que invoca .ToString() .


Si no conoce las plantillas de visualización, son vistas parciales que pueden colocarse en una carpeta DisplayTemplates dentro de la carpeta de visualización asociada a un controlador.


Ejemplo:

Si crea una vista llamada String.cshtml dentro de la carpeta DisplayTemplates de su carpeta de vistas (por ejemplo, Home o Shared ) con el siguiente código:

 @model string @if (string.IsNullOrEmpty(Model)) { Null string } else { @Model } 

Luego @Html.DisplayFor(model => model.Title) (suponiendo que Title sea ​​una cadena) usará la plantilla y mostrará Null string si la cadena es nula o está vacía.

Creo que el principal beneficio sería cuando defines tus propias plantillas de visualización o utilizas anotaciones de datos.

Entonces, por ejemplo, si su título era una fecha, podría definir

 [DisplayFormat(DataFormatString = "{0:d}")] 

y luego en cada página mostraría el valor de una manera consistente. De lo contrario, es posible que deba personalizar la pantalla en varias páginas. Por lo tanto, no ayuda mucho para cadenas simples, pero ayuda con monedas, fechas, correos electrónicos, direcciones URL, etc.

Por ejemplo, en lugar de que una dirección de correo electrónico sea una cadena simple, podría aparecer como un enlace:

 @ViewData.TemplateInfo.FormattedModelValue 

DisplayFor también es útil para la DisplayFor de plantillas. Puede escribir una plantilla para su Modelo y hacer algo como esto:

 @Html.DisplayFor(m => m) 

Similar a @Html.EditorFor(m => m) . Es útil para el principal DRY para que no tenga que escribir la misma lógica de visualización una y otra vez para el mismo Modelo.

Eche un vistazo a este blog en plantillas de MVC2. Todavía es muy aplicable a MVC3:

http://www.dalsoft.co.uk/blog/index.php/2010/04/26/mvc-2-templates/


También es útil si su modelo tiene una anotación de datos. Por ejemplo, si la propiedad del modelo está decorada con la anotación de datos EmailAddress , DisplayFor representará como un enlace mailto: .

Después de buscar una respuesta para mí por algún tiempo, pude encontrar algo. en general, si lo estamos usando para una sola propiedad, aparece igual incluso si hacemos una “Fuente de visualización” de HTML generado A continuación, se genera HTML, por ejemplo, cuando quiero mostrar solo la propiedad de Nombre para mi clase

   myClassNameProperty   myClassNameProperty, This is direct from Item  

Este es el código HTML generado a partir del código siguiente

  @Html.DisplayFor(modelItem=>item.Genre.Name)   @item.Genre.Name, This is direct from Item  

Al mismo tiempo ahora si quiero mostrar todas las propiedades en una statement para mi clase “Género” en este caso, puedo usar @ Html.DisplayFor () para guardar en mi tipeo, por lo menos

Puedo escribir @ Html.DisplayFor (modelItem => item.Genre) en lugar de escribir una statement separada para cada propiedad del género como se muestra a continuación

 @item.Genre.Name @item.Genre.Id @item.Genre.Description 

y así sucesivamente dependiendo del número de propiedades.