将对象传递给HTML属性

时间:2011-06-22 04:22:11

标签: c# asp.net html asp.net-mvc-3

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

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

如何将attrs转换为像这样的字符串,将它们嵌入到HTML标记中:

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

提前致谢:)

3 个答案:

答案 0 :(得分:71)

令人惊讶的是,这个功能由RouteValueDictionary类提供:

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

答案 1 :(得分:22)

您无需转换为字符串。 HTML Helpers的最后一个参数是一个Object。 你只要像上面所写的那样给它一个对象:

例如

@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类/选择器而不是单独的样式表。 此外,当您使用MVC HTML帮助程序时,应自动设置每个DOM元素的ID

答案 2 :(得分:6)

以下是转换的方法:

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