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