[asp.net-mvc] ASP.NET MVC 3 - Plantilla de visualización frente a plantilla de visualización versus editorial


Answers

Ciertamente podría personalizar DisplayFor para mostrar un formulario editable. Pero la convención es que DisplayFor sea ​​de readonly y EditorFor para editar. Cumplir con la convención asegurará que no importa lo que pase a DisplayFor , hará el mismo tipo de cosas.

Question

Entonces, el título debería hablar por sí mismo.

Para crear componentes reutilizables en ASP.NET MVC, tenemos 3 opciones (podrían ser otras que no he mencionado):

Vista parcial:

@Html.Partial(Model.Foo, "SomePartial")

Plantilla de editor personalizado:

@Html.EditorFor(model => model.Foo)

Plantilla de visualización personalizada:

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

En términos de la vista / HTML real, las tres implementaciones son idénticas:

@model WebApplications.Models.FooObject

<!-- Bunch of HTML -->

Entonces, mi pregunta es: ¿cuándo / cómo decides cuál de los tres usar?

Lo que realmente estoy buscando es una lista de preguntas que debe hacerse antes de crear una, para lo cual las respuestas se pueden usar para decidir qué plantilla usar.

Aquí están las 2 cosas que he encontrado mejor con EditorFor / DisplayFor:

  1. Respetan las jerarquías de modelo al procesar HTML helpers (por ejemplo, si tiene un objeto "Bar" en su modelo "Foo", los elementos HTML para "Bar" se representarán con "Foo.Bar.ElementName", mientras que un parcial tendrá " ElementName ").

  2. Más robusto, por ejemplo, si tuviera una List<T> de algo en su ViewModel, podría usar @Html.DisplayFor(model => model.CollectionOfFoo) , y MVC es lo suficientemente inteligente como para ver que es una colección y renderizar la única pantalla para cada elemento (a diferencia de un parcial, que requeriría un ciclo for explícito).

También escuché que DisplayFor presenta una plantilla de "solo lectura", pero no entiendo eso, ¿no podría lanzar un formulario allí?

¿Puede alguien decirme algunas otras razones? ¿Hay alguna lista / artículo en alguna parte que compare los tres?




Utilice el _partial vista _partial si:

  1. Ver lógica centrada
  2. Qué mantener todos los HTML relacionados con la vista _partial solo en esta vista. En el método de plantilla, deberá mantener algo de HTML fuera de la Vista de plantilla como "Encabezado principal o cualquier borde / configuración externa".
  3. Quiere renderizar vista parcial con lógica (desde el controlador) usando URL.Action("action","controller") .

Razones para usar la plantilla:

  1. ¿Desea eliminar ForEach(Iterator) ? La plantilla es lo suficientemente buena para identificar el Modelo como un tipo de lista. Lo hará automáticamente.
  2. Modelo Centric Logic. Si se encuentran varias vistas en la misma pantalla para la carpeta Plantilla, entonces la representación dependerá del Modelo Pasado.





Related