2011-06-30 5 views
24

Ok Je viens de découvrir sur le EditorForModel dans MVC et je veux savoir quand je devrais l'utiliser au lieu d'un EditorFor sur chacune de mes propriétés? Et pourquoi, lorsque j'ajoute une vue fortement typée, elle ne l'utilise pas et construit un EditorFor sur chaque propriété?Pourquoi ne pas utiliser Html.EditorForModel()

Je suis en retard sur ce ... mais merci pour l'info!

+1

S'il vous plaît jeter un oeil à [blog] Brad wilson (http: // bradwilson. typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-1-introduction.html) –

Répondre

3

Vous devriez l'utiliser lorsque c'est possible, mais vous aurez parfois besoin de la personnalisation des utilisations individuelles Html.EditorFor. Pour ce qui est de savoir pourquoi les gabarits intégrés ne l'utilisent pas, c'est principalement parce qu'ils sont bêtes en général, mais aussi parce que, si je me souviens bien, ils doivent envelopper des éléments (comme des rangées de tables, etc.) Html.EditorFor .

-5

Je n'ai jamais utilisé EditorFor et je n'imagine pas l'utiliser à l'avenir. EditorFor suppose qu'il sait ce que vous voulez. Vous savez ce qui arrive quand vous assumez quelque chose. Peut-être que si vous faisiez un pic Mvc rapide pour tester autre chose, vous pourriez utiliser EditorFor.

+0

Vous pouvez éditer les "suppositions" par vous-même en ajoutant EditorTemplates. Ce sont des fichiers .cshtml, qui sont lancés lorsque la méthode EditorFor est exécutée. F.eks. DateTime.cshtml est exécuté si l'entrée dans EditorFor est un DateTime. –

+1

DateTime est un excellent exemple de pourquoi je n'utilise pas EditorFor.DateTime peut être la date seulement, l'heure seulement ou la date-heure. En plaçant le type d'entrée exact dans la vue, je sais sans avoir à ouvrir un autre fichier comment un champ date-heure sera traité. – 37Stars

+6

Personnellement, je préfère utiliser des annotations de données et des fournisseurs de métadonnées de modèle pour contrôler ce genre de chose. Cela signifie que mes vues peuvent être très concises et que la logique de contrôle de la sortie rendue est au même endroit. –

0

@ Html.EditorForModel() ?? Et abandonner le plaisir d'écrire votre propre point de vue? smile

En plus du plaisir, le faire par habitude est plutôt risqué. Considérez le scénario commun suivant - vous avez une variable booléenne dire IsMale dans votre base de données dans votre table client. Bien évidemment, vous ne voulez pas la version par défaut (IsMale avec une case à cocher) - vous voulez probablement quelque chose d'un peu plus convivial, par exemple un {select, Options ...,/select} tags, non? C'est là que la vue commence vraiment. C'est la personnalisation. Chaque vue est un peu différente. Vous avez le moteur RAZOR, exploitez-le au maximum! À votre avis, vous pouvez remplacer n'importe quoi, ou même manuellement un morceau entier de code HTML de votre choix.

+2

EditorForModel() (sans arguments) recherchera des EditorTemplates personnalisés basés sur la convention. Cette fonction n'a rien à voir avec le template _what_ utilisé. –

+0

Comment appelez-vous un accro du code? Une codie? – frostymarvelous

19

Puisque la réponse acceptée est une réponse de lien seulement (et a été enlevée), j'ai pensé que je répondrais réellement à la question dérivée du blog de Brad Wilson: ASP.NET MVC 2 Templates, Part 1: Introduction.

Les expressions de modèle sont des aides simples qui fonctionnent sur le modèle actuel. La ligne DisplayForModel() est équivalente à DisplayFor (model => model).

TL; DR la même idée peut supposer pour EditorFor(model => model) et EditorForModel(); ces méthodes auxiliaires réalisent la même chose. EditorForModel() suppose que l'expression de modèle est la @model qui a été transmise à la vue.

Prenez les modèles et vue par exemple suivant:

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) 
Questions connexes