TextBoxFor中“htmlAttributes”的类型以及如何向其添加更多属性

时间:2013-02-13 22:21:28

标签: asp.net-mvc extension-methods

我已经为我的MVC视图添加了一个扩展方法作为帮助器,并希望为已有的任何属性添加另一个属性。这是标准TextBoxFor方法的签名(我的,除了我的名字叫做“TextBoxForWithTitle”):

public static MvcHtmlString TextBoxFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression,
    Object htmlAttributes
)

最后一个参数htmlAttributes看起来像一个名称值对。当我将鼠标悬停在它上面时(在运行时),它的值是“{class = emailtextbox}”,我在Razor视图中添加了它。如何在我的扩展方法中为此添加其他名称/值属性?我尝试将它转换为字典,但这不起作用。

2 个答案:

答案 0 :(得分:5)

它表明它是对象的类型。你如何初始化一个新对象? new { [properties go here] }。所以我们归结为:

@Html.TextBoxFor(x => x.SomeId, new { @class = "whatever-class", @id = 5, data_customAttr = "customAttribute"})

请注意,如果您需要data-属性,请使用_代替-。他们将被转换。

答案 1 :(得分:3)

您可以将其作为 RouteValueDictionary

进行访问
IDictionary<string, object> newAttributes = new RouteValueDictionary(htmlAttributes);

这允许您在代码中添加新项目:

newAttributes.Add(new KeyValuePair<string, object>("id", id));