如何将对象传递给HTML属性? 例如,我有以下代码:
var attrs = new { id = "myid", style = "color: Red;" };
如何将attrs转换为像这样的字符串,将它们嵌入到HTML标记中:
id="myid" style="color: Red;"
提前致谢:)
答案 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