web-dev-qa-db-fra.com

Passer un objet aux attributs HTML

Comment passer un objet aux attributs HTML? Par exemple, j'ai le code suivant:

var attrs = new { id = "myid", style = "color: Red;" };

Comment convertir des attrs en chaîne comme celle-ci pour les intégrer dans un balisage HTML:

id="myid" style="color: Red;"

Merci d'avance :)

43
Hieu Nguyen Trung

Cette fonctionnalité est, de façon surprenante, fournie par la classe RouteValueDictionary :

IDictionary<string, object> htmlAttributes = new RouteValueDictionary(attrs);

Vous pouvez ensuite utiliser ce dictionnaire en conjonction avec un TagBuilder , que vous utiliserez probablement de toute façon:

var tagBuilder = new TagBuilder("input");
tagBuilder.MergeAttributes(htmlAttributes);
tagBuilder.ToString(TagRenderMode.Normal);

Vous pouvez voir cela dans le code source ASP.NET MVC lui-même; l'un des exemples les plus simples se trouve dans TextAreaExtensions.cs .

MODIFIER:

Afin de convertir correctement "data_attr" en "data-attr", utilisez la méthode statique AnonymousObjectToHtmlAttributes.

IDictionary<string, object> htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(attrs);
72
Domenic

Vous n'avez pas besoin de convertir en chaîne. Le dernier paramètre pour les aides HTML est un objet. Vous lui donnez simplement l'objet comme vous l'avez écrit ci-dessus:

Par exemple

@Html.TextBoxFor(x => x.Foo, new { size = 10, maxlength = 10 }) 
@Html.TextAreaFor(x => x.Notes, new { @class = "additionalInfo" })
@Html.TextBoxFor(x=>x.Registration.Address.Postcode, new {type="number", @class="postcode numeric", size=5, maxlength=5})

sur une note latérale, vous ne devriez probablement pas définir des styles directement en ligne avec votre code HTML et utiliser à la place une classe/un sélecteur CSS avec une feuille de style séparée. L'ID de chaque élément DOM doit également être défini automatiquement lorsque vous utilisez les assistants HTML MVC

23
Daveo

Voici comment effectuer cette conversion:

var htmlAttributes = new { id="myid", @class="myclass" };

string string_htmlAttributes = "";
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(htmlAttributes))
{
  string_htmlAttributes += string.Format("{0}=\"{1}\" ", property.Name.Replace('_', '-'), property.GetValue(htmlAttributes));
}

PropertyDescriptor appartiennent à la classe System.ComponentModel

6
Chtiwi Malek