43 votes

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 :)

72voto

Domenic Points 40761

Cette fonctionnalité est assez surprenant, fourni par l' RouteValueDictionary classe:

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

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

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

Vous pouvez voir cette façon de faire dans le ASP.NET MVC code source lui-même; l'un des exemples les plus simples est de TextAreaExtensions.cs.

EDIT:

Dans le but de les convertir "data_attr" pour les données "attr", utilisez l' AnonymousObjectToHtmlAttributes méthode statique.

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

23voto

Daveo Points 5117

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. De plus, l'ID de chaque élément DOM doit être automatiquement défini lorsque vous utilisez les assistants HTML MVC

6voto

Chtiwi Malek Points 1574

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X