asp.net-mvc - ASP.NET MVC 3 - Plantilla de visualización parcial vs Plantilla de editor vs




2 Answers

Sin duda, puede personalizar DisplayFor para mostrar un formulario editable. Pero la convención es que DisplayFor sea ​​de readonly y EditorFor que sea para edición. Cumplir con la convención asegurará que no importa lo que pase en DisplayFor , hará el mismo tipo de cosas.

asp.net-mvc asp.net-mvc-3 razor asp.net-mvc-partialview editortemplates

Por lo tanto, el título debe 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 real / HTML, 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 la 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 cuando representan ayudantes HTML (por ejemplo, si tiene un objeto "Barra" en su modelo "Foo", los elementos HTML para "Barra" se representarán con "Foo.Bar.ElementName", mientras que un parcial tendrá " ElementName ").

  2. Más robusto, por ejemplo, si tenía 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 mostrar la única pantalla. para cada elemento (a diferencia de un parcial, que requeriría un bucle explícito para).

También escuché que DisplayFor muestra una plantilla de "solo lectura", pero no entiendo eso. ¿No puedo lanzar un formulario allí?

¿Puede alguien decirme algunas otras razones? ¿Hay una lista / artículo en algún lugar comparando los tres?




Utilice el _partial vista _partial si:

  1. Ver Centric Logic
  2. Lo que debe mantener todo el HTML relacionado con la vista _partial en esta vista solamente. En el método de plantilla, tendrá que mantener algo de HTML fuera de la Vista de la plantilla como "Encabezado principal o cualquier borde / configuración exterior.
  3. Desea renderizar una vista parcial con lógica (desde el controlador) usando URL.Action("action","controller") .

Razones para usar la Plantilla:

  1. ¿Quieres eliminar ForEach(Iterator) . La plantilla es suficiente para identificar el modelo como un tipo de lista. Lo hará automáticamente.
  2. Modelo de lógica céntrica. Si se encuentran varias vistas en la misma pantalla para la carpeta de plantillas, entonces la representación dependerá del modelo aprobado.



Related