将对象传递给HTML属性

如何将对象传递给HTML属性? 例如,我有以下代码:

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

如何将attrs转换为像这样的string来将它们embedded到HTML标记中:

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

提前致谢 :)

RouteValueDictionary类提供了这个function,令人惊讶的是:

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

然后,你可以使用这个字典与一个TagBuilder ,你可能会使用它:

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

您可以在ASP.NET MVC源代码本身中看到这一点; 其中一个比较简单的例子就是TextAreaExtensions.cs 。

编辑:

为了正确地将“data_attr”转换为“data-attr”,请使用AnonymousObjectToHtmlAttributes静态方法。

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

你不需要转换成string。 HTML Helpers的最后一个参数是Object。 你只要给它像上面写的对象:

对于exmample

 @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}) 

在一个侧面说明你可能不应该设置风格直接与您的HTML内联,并使用CSS类/select器,而不是一个单独的样式表。 另外,当使用MVC HTML助手时,每个DOM元素的ID应该自动设置

以下是如何做这个转换:

 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属于类System.ComponentModel