web-dev-qa-db-fra.com

Définissez l'attribut de classe sur Html.EditorFor dans ASP.NET MVC Razor View

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"}?

31
Saeid

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" })
45
Darin Dimitrov

Essaye ça: 

@Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } })
55
10gler

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-

8
Kamran Qadir

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.

2
user1738579

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

0
Bilal