Comme vous le savez, nous pouvons définir des attributs sur actionLink ou textBox dans des vues rasoirs, mais comment définir des attributs sur @Html.EditorFor
, je sais que EditorFor est un élément dynamique qui peut être défini en fonction du type de modèle, mais toutes ses formes peuvent obtenir les attributs. Donc, y a-t-il un moyen de définir l'attribut sur @Html.EditorFor
quelque chose comme ceci: new {@class = "myclass"}
?
L'assistant EditorFor
restitue le modèle d'éditeur correspondant. Cela pourrait être le modèle default ou un modèle personnalisé que vous avez écrit. Ce modèle peut contenir n'importe quel balisage. Il pourrait contenir de nombreux éléments DOM. Alors maintenant, vous comprenez que demander l’application d’une classe à un modèle n’a aucun sens. A quel élément de ce modèle voulez-vous que cette classe soit appliquée? Par exemple, avec l'aide de TextBoxFor, vous savez qu'il générera un seul champ de saisie. Il est donc logique de lui appliquer une classe CSS (c'est exactement ce que l'argument htmlAttributes
vous permet de faire).
Ceci étant dit, il existe différentes techniques. Par exemple, l’un des domaines que j’aime le plus est d’écrire un fournisseur de métadonnées de modèle d’annotations de données personnalisé et des modèles d’éditeur personnalisés, comme indiqué dans le post de blog suivant .
Une autre possibilité consiste à personnaliser les modèles par défaut (comme indiqué dans l'article de blog de Brad Wilson) et à appliquer différents attributs HTML au champ de saisie correspondant. Prenons un exemple avec le modèle d’éditeur string.cshtml:
@model string
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, ViewData)
Et maintenant, lorsque vous souhaitez rendre ce modèle d'éditeur pour une propriété de chaîne sur votre modèle de vue:
@Html.EditorFor(x => x.SomeStringProperty, new { @class = "myclass" })
Essaye ça:
@Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } })
Ajouter des attributs personnalisés en tant que
@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @data_minlength = "3", @class = "form-control input-md", @placeholder = "Name", @required = "required", @id= "txtName"} })
Remplacer data- en @data_
Il générera le code HTML correct avec data-
Je crois que l'affiche originale était correcte
chaqueEditorFor()
crée un HTML element
principal (même s’il peut y avoir d’autres personnes présentes), il serait donc très utile de pouvoir passer un object contenant HTML attributes
à appliquer à ce HTML element
principal.
Je veux appliquer l'attributHTML 5
'autofocus' à un champ sur chaque formulaire ,
mais je ne veux pas avoir à écrire du code personnalisé.
Je déteste le fait que je sois actuellement réduit à utiliser, par exemple, @Html.TextBoxFor()
pour celui-ci field uniquement pour pouvoir appliquer des attributs attributs spécifiques au input element
.
La méthode EditorFor()
a un paramètre qu'elle appelle additionalViewData
, mais je n'ai aucune idée de ce que vous pouvez faire avec cela et la recherche surMSDNne m'a été d'aucune aide.
Essayez ce code simple pour ajouter une classe à @Html.EditorFor()
@Html.EditorFor(x => x.Demo)
<style type="text/css">
#Demo
{
color:#fff;
width: 50%;
}
</style>
ce code fonctionne bien pour MVC3