2011-08-25 13 views
9

Actualmente me estoy mojando los pies con ASP.NET MVC 3 w/Razor, y estoy un poco confundido acerca de la forma más adecuada de representar elementos de entrada HTML.HtmlHelper.EditorFor vs Html.TextBox vs Html input

Tal como lo veo, hay 3 métodos para la prestación de estos elementos para la propiedad de un modelo:

  1. Utilizando el método HtmlHelper EditorFor
  2. Utilizando el método Html.TextBox (por cuerda o valores numéricos)
  3. Usando el elemento de entrada html sin formato y utilizando etiquetas Razor en línea para poner el valor en el elemento.

¿Cuál es el método recomendado para hacer eso? Estoy un poco preocupado con el método EditorFor, ya que no tengo ningún control sobre el HTML renderizado, y pensé que uno de los objetivos de correo del framework MVC era evitar la sobre-abstracción de WebForms.

¿Qué opinas? ¿Cuál es la mejor práctica para esto?

Gracias!

Respuesta

5

Html.EditorFor es la forma preferida. Puede controlar el código HTML escribiendo editor templates personalizado para el tipo especificado. ModelMetadata le permite controlar el tipo de campo de entrada generado. Si necesita aplicar atributos personalizados adicionales, también puede escribir un custom metadata provider.

1

En realidad sí tiene control sobre el código HTML generado por EditorFor: you can create custom templates for each type.

EditorFor tiene algunas ventajas claras cuando desea hacer algo más complicado que solo un cuadro de texto. Tengo un caso en el que quiero un editor para la propiedad "personal". Así que mi plantilla EditorFor crea un menú desplegable con la lista del personal, selecciona la correcta y luego agrega un cuadro de texto con algo de Javascript utilizado para filtrar la lista por apellido (ya que es bastante larga). Podría hacerlo manualmente, pero ¿por qué? Mi vista solo llama a EditorFor (lo que sea) y se llama a la plantilla. El código está muy limpio como resultado.

Así que mi consejo es usar EditorFor a menos que tenga un caso específico en el que tenga sentido no hacerlo. Si decide personalizar sus editores más tarde, todo lo que tiene que hacer es cambiar la plantilla para el tipo y ¡listo! Un buen ejemplo es para las fechas. El editor básico es solo un cuadro de texto, pero es bastante fácil crear una plantilla personalizada que conecte un selector de fechas jQuery. Puede hacerlo más tarde sin tener que cambiar ninguna de sus vistas para aprovecharla si está utilizando EditorFor, lo cual no puede hacer si lo está haciendo todo en línea con las cajas de texto HTML.

0

La mejor manera es HTML.EditorFor, ya que puede crear las plantillas de editor para el tipo dado y también su formulario se vinculará a su objeto ModelView de forma automática en el envío de formularios.