187 votes

Différences entre Html.TextboxFor et Html.EditorFor dans MVC et Razor

Pourquoi ont-ils été modifiés par défaut lors de l'ajout d'une nouvelle vue "édition" ? Quels sont les avantages de l'utilisation de EditorFor() vs. TextboxFor() ?

J'ai trouvé ceci

Par défaut, les échafaudages Create et Edit utilisent désormais l'aide Html.EditorFor au lieu de l'aide Html.TextBoxFor. Cela améliore la prise en charge des métadonnées sur le modèle sous la forme d'une attributs d'annotation de données lorsque la boîte de dialogue Ajouter une vue génère une vue.

175voto

Darin Dimitrov Points 528142

Les avantages de EditorFor est que votre code n'est pas lié à un <input type="text" . Ainsi, si vous décidez de modifier l'aspect du rendu de vos zones de texte, par exemple en les enveloppant dans un cadre de type div vous pouvez simplement écrire un modèle d'éditeur personnalisé ( ~/Views/Shared/EditorTemplates/string.cshtml ) et toutes les zones de texte de votre application bénéficieront automatiquement de ce changement, alors que si vous avez codé en dur l'option Html.TextBoxFor vous devrez le modifier partout. Vous pouvez également utiliser les annotations de données pour contrôler la façon dont le rendu est effectué.

141voto

Harshal Points 165

TextBoxFor : Il rendra comme un élément html d'entrée de texte correspondant à l'expression spécifiée. En d'autres termes, il sera toujours rendu comme une zone de saisie de texte, quel que soit le type de données de la propriété qui est liée au contrôle.

EditeurPour : Ce contrôle est un peu intelligent. Il rend le balisage HTML basé sur le type de données de la propriété. Par exemple, supposons qu'il y ait une propriété booléenne dans le modèle. Pour rendre cette propriété dans la vue comme une case à cocher, nous pouvons utiliser CheckBoxFor ou EditorFor. Les deux généreront le même balisage.

Quel est l'avantage d'utiliser EditorFor ?

Comme nous le savons, selon le type de données de la propriété, il génère le balisage html. Donc, supposons que demain, si nous changeons le type de données de la propriété dans le modèle, il ne sera pas nécessaire de changer quoi que ce soit dans la vue. Le contrôle EditorFor modifiera automatiquement le balisage html.

56voto

GvS Points 28137

El Html.TextboxFor crée toujours une zone de texte ( <input type="text" ... ).

Alors que l'EditorFor examine le type et les méta-informations, et peut rendre un autre contrôle ou un modèle que vous fournissez.

Par exemple, pour les propriétés DateTime, vous pouvez créer un modèle qui utilise le jQuery DatePicker.

8voto

Lalitha1729 Points 89

C'est l'une des différences fondamentales non mentionnées dans les commentaires précédents :
Readonly fonctionnera avec les textbox for et ne fonctionnera pas avec les EditorFor .

@Html.TextBoxFor(model => model.DateSoldOn, new { @readonly = "readonly" })

Le code ci-dessus fonctionne, alors qu'avec le code suivant vous ne pouvez pas faire le contrôle de en lecture seule .

@Html.EditorFor(model => model.DateSoldOn, new { @readonly = "readonly" })

4voto

Greg Gum Points 1441

Il y a également une légère différence dans la sortie html pour un type de données string.

Html.EditorFor:  
<input id="Contact_FirstName" class="text-box single-line" type="text" value="Greg" name="Contact.FirstName">

Html.TextBoxFor:
<input id="Contact_FirstName" type="text" value="Greg" name="Contact.FirstName">

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X