web-dev-qa-db-fra.com

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

Pourquoi, par défaut, ceux-ci ont-ils été modifiés lors de l'ajout d'une nouvelle vue "Modifier"? Quels sont les avantages de l’utilisation de EditorFor() par rapport à TextboxFor()?

J'ai trouvé ça

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

163
ShaneKm

Les avantages de EditorFor sont que votre code n'est pas lié à un <input type="text". Ainsi, si vous décidez de modifier quelque peu l'aspect du rendu de vos zones de texte, comme si vous les enveloppiez dans un div, vous pouvez simplement écrire un modèle d'éditeur personnalisé (~/Views/Shared/EditorTemplates/string.cshtml) et tous vos zones de texte de votre application seront automatiquement enregistrées. profitez de ce changement alors que si vous avez codé en dur Html.TextBoxFor vous devrez le modifier partout. Vous pouvez également utiliser des annotations de données pour contrôler la manière dont cela est rendu.

159
Darin Dimitrov

TextBoxFor: Il sera rendu comme un élément HTML d'entrée de texte correspondant à l'expression spécifiée. Dans Word simple, le rendu est toujours identique à celui d'une zone de saisie, quel que soit le type de données de la propriété liée au contrôle.

EditorFor: Ce contrôle est un peu intelligent. Il rend le balisage HTML en fonction du 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 sous forme de case à cocher, nous pouvons utiliser CheckBoxFor ou EditorFor. Les deux seront générer le même balisage.

Quel est l'avantage d'utiliser EditorFor?

Comme nous le savons, en fonction du type de données de la propriété, il génère le balisage HTML. Donc, supposons demain si nous changeons le type de données de la propriété dans le modèle, nul besoin de changer quoi que ce soit dans la vue. Le contrôle EditorFor modifiera automatiquement le balisage HTML.

120
Harshal

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

Alors que EditorFor examine le type et les méta-informations, il peut générer un autre contrôle ou un modèle fourni.

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

55
GvS

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

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

Le code ci-dessus fonctionne, où comme avec ce qui suit vous ne pouvez pas rendre le contrôle à en lecture seule.

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

Il existe également une légère différence dans la sortie HTML pour un type de données chaîne.

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">
4
Greg Gum