2

我添加了一个扩展方法作为我的 MVC 视图的助手,并希望将另一个属性添加到它已有的任何属性中。这是标准 TextBoxFor 方法的签名(我的,除了我的称为“TextBoxForWithTitle”):

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

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

4

2 回答 2

5

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

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

请注意,如果您需要data-属性,请使用_而不是-. 他们将被转换。

于 2013-02-13T22:35:33.830 回答
5

您可以将其作为RouteValueDictionary访问:

IDictionary<string, object> newAttributes = new RouteValueDictionary(htmlAttributes);

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

newAttributes.Add(new KeyValuePair<string, object>("id", id));
于 2013-02-13T22:36:21.457 回答