2011-06-30 15 views
24

Ok Acabo de descubrir sobre el EditorForModel en MVC y quiero saber cuándo debo usar esto en lugar de un EditorFor en cada una de mis propiedades? ¿Y por qué cuando agrego una vista fuertemente tipada no la uso y creo un EditorFor en cada propiedad?¿Por qué no utilizar Html.EditorForModel()

Llegué tarde a esto ... ¡pero gracias por la información!

+1

Por favor, echar un vistazo a [blog] de Brad Wilson (http: // bradwilson. typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-1-introduction.html) –

Respuesta

3

Debe usarlo cuando sea posible, pero a veces necesitará la personalización de los usos individuales de Html.EditorFor.

cuanto a por qué las plantillas incorporadas no lo usan, eso es principalmente porque son tontos en general, sino también porque, si no recuerdo mal, que necesitan para envolver elementos (como filas de la tabla etc.) alrededor de cada Html.EditorFor .

-5

Nunca he usado EditorFor y no me imagino usarlo en el futuro. EditorFor supone que sabe lo que quiere. Sabes lo que sucede cuando asumes algo.

Quizás si estuvieras haciendo un pico de Mvc rápido para probar algo más, podrías usar EditorFor.

+0

Puede editar las "suposiciones" usted mismo agregando EditorTemplates. Es decir, archivos .cshtml, que se ejecutan cuando se ejecuta el método EditorFor. F.eks. DateTime.cshtml se ejecuta si la entrada en EditorFor es un DateTime. –

+1

DateTime es un gran ejemplo de por qué no uso EditorFor.DateTime puede ser solo de fecha, hora o fecha-hora. Al colocar el tipo de entrada exacto en la vista, sé sin tener que abrir otro archivo cómo se tratará un campo de fecha y hora. – 37Stars

+6

Personalmente, prefiero usar anotaciones de datos y modelos de proveedores de metadatos para controlar este tipo de cosas. Esto significa que mis puntos de vista pueden ser muy concisos y la lógica para controlar la producción representada está en un solo lugar. –

0

@ Html.EditorForModel() ?? ¿Y renunciar a la diversión de escribir tu propio punto de vista? sonrisa

Además de la diversión, hacerlo como un hábito es bastante arriesgado. Considere el siguiente escenario común: tiene una variable bool, por ejemplo, IsMale en su base de datos en su tabla de clientes. Bueno, obviamente no quieres la versión por defecto (IsMale con una casilla de verificación); probablemente quieras algo más amigable, por ejemplo, una etiqueta {select, Options ....,/select}, ¿no? ahí es donde la vista realmente comienza a funcionar. Esa es la personalización. Cada vista es un poco diferente. ¡Tienes el motor RAZOR, explóralo al máximo! En su opinión, puede anular cualquier cosa, o incluso escribir manualmente un fragmento completo de código HTML.

+2

EditorForModel() (sin argumentos) buscará Plantillas de Editor personalizadas según la convención. Esa función no tiene nada que ver con _what_ template se usa. –

+0

¿Cómo llamas a un adicto al código? Un codie? – frostymarvelous

19

Dado que la respuesta aceptada es una respuesta de solo enlace (y se eliminó), pensé que realmente respondería a la pregunta derivada del blog de Brad Wilson: ASP.NET MVC 2 Templates, Part 1: Introduction.

Las expresiones del modelo son simples ayudantes que operan en el modelo actual. La línea DisplayForModel() es equivalente a DisplayFor (modelo => modelo).

TL; DR la misma idea se puede suponer para EditorFor(model => model) y EditorForModel(); estos métodos de ayuda logran lo mismo. EditorForModel() asume que la expresión del modelo es @model que se pasó a la vista.

Tome los siguientes modelos y vistas, por ejemplo:

public class Person 
{ 
    public string Name {get; set;} 
    public Address MailingAddress {get; set;} 
} 

public class Address 
{ 
    public String Street {get; set;} 
    public String City {get; set;} 
    public String State {get; set;} 
} 

Create.cshtml:

@model MyNamespace.Models.Person 

/* So, you need an Editor for the Person model? */ 
@Html.EditorForModel() 
/*the above is equivalent to @Html.EditorFor(model => model) */ 

/* you need to specify the Address property that the editor accepts? */ 
@Html.EditorFor(model => model.MailingAddress) 
Cuestiones relacionadas