MVC3 - 将View中设置的htmlAttributes与Helper中设置的htmlAttributes合并

时间:2011-11-21 12:14:25

标签: asp.net-mvc-3

我正在使用Disable autocomplete on html helper textbox in MVC在文本框中将“自动完成”添加到“关闭”:

    public static MvcHtmlString NoAutoCompleteTextBoxFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object htmlAttributes)
    {
        return html.TextBoxFor(expression, new { autocomplete = "off" });
    }

如果视图上没有htmlAttributes,这很好。一些文本字段还添加了额外的CSS类:

    @Html.NoAutoCompleteTextBoxFor(m => m.UserName, new { @class = "ignore" })

有没有一种合并htmlAttributes集的方法,而不是专门为此创建另一个帮助器?

提前致谢...

2 个答案:

答案 0 :(得分:3)

您可以使用RouteValueDictionary。

var attrs = new RouteValueDictionary(htmlAttributes);
attrs ["autocomplete"] = "off";
return html.TextBoxFor(expression, attrs);

答案 1 :(得分:1)

是的原因。将对象传递给帮助程序时,可以使用反射来读取所有属性(对应于要设置的html属性),并将组合属性作为Dictionary传递给帮助程序:

Dictionary<string, object> attrs = new Dictionary<string, object>();

if (htmlAttributes != null)
{
    foreach (var prop in htmlAttributes.GetType().GetProperties())
    {
        attrs[prop.Name] = prop.GetValue(htmlAttributes, null);
    }
}

// now add your own attribute(s):
htmlAttributes["autocomplete"] = "off";

return html.TextBoxFor(expression, htmlAttributes);