我已经为我的MVC视图添加了一个扩展方法作为帮助器,并希望为已有的任何属性添加另一个属性。这是标准TextBoxFor方法的签名(我的,除了我的名字叫做“TextBoxForWithTitle”):
public static MvcHtmlString TextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
Object htmlAttributes
)
最后一个参数htmlAttributes看起来像一个名称值对。当我将鼠标悬停在它上面时(在运行时),它的值是“{class = emailtextbox}”,我在Razor视图中添加了它。如何在我的扩展方法中为此添加其他名称/值属性?我尝试将它转换为字典,但这不起作用。
答案 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));