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

Pourquoi par défaut ceux-ci ont-ils été modifiés lors de l’ajout d’une nouvelle vue “edit”? Quels sont les avantages lors de l’utilisation de EditorFor() et de TextboxFor() ?

j’ai trouvé ça

Par défaut, les échafaudages Create et Edit utilisent désormais 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’atsortingbuts d’annotation de données lorsque la boîte de dialog Ajouter une vue génère une vue.

Les avantages de EditorFor sont que votre code n’est pas lié à un . Donc, si vous décidez de changer quelque chose à l'aspect de rendu de vos ~/Views/Shared/EditorTemplates/ssortingng.cshtml comme si vous les enveloppiez dans un div vous pourriez simplement écrire un modèle d'éditeur personnalisé ( ~/Views/Shared/EditorTemplates/ssortingng.cshtml ) et tous vos ~/Views/Shared/EditorTemplates/ssortingng.cshtml dans votre application bénéficiera automatiquement de ce changement alors que si vous avez codé en Html.TextBoxFor vous deviez le modifier partout. Vous pouvez également utiliser les annotations de données pour contrôler la manière dont cela est rendu.

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

EditorFor : Ce contrôle est 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 en tant que 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 soaps, 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, pas besoin de changer quoi que ce soit dans la vue. EditorFor contrôle changera automatiquement le balisage HTML.

Le Html.TextboxFor crée toujours une zone de texte ( ).

Alors que EditorFor examine le type et les métadonnées, 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 utilisant jQuery DatePicker.

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

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

Le code ci-dessus fonctionne, comme avec suivi, vous ne pouvez pas faire le contrôle en lecture seule .

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

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

 Html.EditorFor:  Html.TextBoxFor: