Html.DisplayFor() mostrará el 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 se pueden colocar en una DisplayTemplatescarpeta dentro de la carpeta de vista asociada a un controlador.
Ejemplo:
Si crea una vista nombrada String.cshtmldentro de la DisplayTemplatescarpeta de su carpeta de vistas (por ejemplo Home, o Shared) con el siguiente código:
Luego @Html.DisplayFor(model => model.Title)(suponiendo que Titlees una cadena) usará la plantilla y mostrará <strong>Null string</strong>si la cadena es nula o está vacía.
Me parece inútil, en la mayoría de los casos, usar DisplayFor para tipos primitivos. Por ejemplo, DateTime mostraría la fecha / hora incluso si la parte de la hora fuera inútil. Si pudiera especificar una cadena de formato de "{0: d}" para un tipo DateTime en los atributos de la propiedad en el Modelo, DisplayFor podría ser más útil.
Puede agregar un selector de fecha jQuery a la plantilla EditorFor para un tipo de datos DateTime para mostrar siempre un selector de fecha en formularios, por ejemplo.
Zachary Scott
44
Me parece que es una ingeniería excesiva usarlo en general, pero que debería usarlo cuando desee formatear la salida para ciertos atributos del modelo. Útiles preguntas y respuestas chicos, gracias. + 1s todo el año.
Robin Winslow
¿Qué pasa si tienes dos modelos con el mismo nombre?
Halivingston
77
Creo que el principal beneficio sería cuando defina sus propias plantillas de visualización o utilice 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 manera consistente. De lo contrario, puede que tenga que personalizar la pantalla en varias páginas. Por lo tanto, no ayuda mucho para cadenas simples, pero ayuda para 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:
DisplayForTambién es útil para crear 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 director DRY para que no tenga que escribir la misma lógica de visualización una y otra vez para el mismo Modelo.
Echa un vistazo a este blog sobre plantillas MVC2. Todavía es muy aplicable a MVC3:
También es útil si su modelo tiene una anotación de datos. Por ejemplo, si la propiedad en el modelo está decorada con la EmailAddressanotación de datos, la DisplayForrepresentará como un mailto:enlace.
@Html.DisplayFor(m => m)También se puede simplificar a justo @Html.DisplayForModel().
Brant Bobby
¿Cuál es la expresión de lamda (m => m)? ¿Cuál es la primera m representa?
Arcadian
1
la primera m es el nombre del parámetro
Sinaesthetic
1
@ magic-c0d3r la primera m es el objeto Modelo de la página. Eso es lo que se usa en la expresión labmda
Don Cheadle
4
Después de buscar una respuesta para mí por un tiempo, pude encontrar algo. en general, si lo estamos usando solo para una propiedad, parece lo mismo, incluso si hacemos un "Ver código fuente" del HTML generado
<td>
myClassNameProperty
</td><td>
myClassNameProperty,Thisis direct fromItem</td>
Este es el HTML generado a partir del siguiente código
<td>@Html.DisplayFor(modelItem=>item.Genre.Name)</td><td>@item.Genre.Name,Thisis direct fromItem</td>
Al mismo tiempo, ahora si quiero mostrar todas las propiedades en una declaración para mi clase "Género" en este caso, puedo usar @ Html.DisplayFor () para guardar en mi escritura, por lo menos
Puedo escribir @ Html.DisplayFor (modelItem => item.Genre) en lugar de escribir una declaración separada para cada propiedad de Genre como se muestra a continuación
Creo que el principal beneficio sería cuando defina sus propias plantillas de visualización o utilice anotaciones de datos.
Entonces, por ejemplo, si su título era una fecha, podría definir
y luego en cada página mostraría el valor de manera consistente. De lo contrario, puede que tenga que personalizar la pantalla en varias páginas. Por lo tanto, no ayuda mucho para cadenas simples, pero ayuda para 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:
fuente
DisplayFor
También es útil para crear plantillas. Puede escribir una plantilla para su Modelo y hacer algo como esto:Similar a
@Html.EditorFor(m => m)
. Es útil para el director DRY para que no tenga que escribir la misma lógica de visualización una y otra vez para el mismo Modelo.Echa un vistazo a este blog sobre plantillas 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 en el modelo está decorada con la
EmailAddress
anotación de datos, laDisplayFor
representará como unmailto:
enlace.fuente
@Html.DisplayFor(m => m)
También se puede simplificar a justo@Html.DisplayForModel()
.Después de buscar una respuesta para mí por un tiempo, pude encontrar algo. en general, si lo estamos usando solo para una propiedad, parece lo mismo, incluso si hacemos un "Ver código fuente" del HTML generado
Este es el HTML generado a partir del siguiente código
Al mismo tiempo, ahora si quiero mostrar todas las propiedades en una declaración para mi clase "Género" en este caso, puedo usar @ Html.DisplayFor () para guardar en mi escritura, por lo menos
Puedo escribir @ Html.DisplayFor (modelItem => item.Genre) en lugar de escribir una declaración separada para cada propiedad de Genre como se muestra a continuación
y así sucesivamente dependiendo del número de propiedades.
fuente