如何在HtmlHelper扩展中支持htmlAttributes参数?

时间:2012-03-12 14:48:35

标签: asp.net-mvc

我正在创建HtmlHelper扩展方法。许多内置框架方法都支持像htmlAttributes(类型为object)这样的参数,这些参数会被渲染到结果HTML上。如何提供我自己的方法的重载,这些方法也支持htmlAttributes参数而不重写字符串连接逻辑以将它们作为标记上的属性呈现?

1 个答案:

答案 0 :(得分:17)

HtmlHelper对象有一个方法可以将对象转换为名称/值字典,然后您可以在构建时将其合并到标记中。例如,此代码将生成<script>标记,其中包含传入的任何额外属性:

var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes) as IDictionary<string, object>;

TagBuilder tag = new TagBuilder("script");
tag.MergeAttributes(attributes);
tag.MergeAttribute("type", "text/javascript");
tag.MergeAttribute("src", scriptPath);

您可以提供重载或使用默认值为null提供htmlAttributes值,这将产生空Dictionary

(该方法还将属性名称清理为有效的HTML属性等,因此几乎可以在任何对象上使用它。)