2

MVCビューのヘルパーとして拡張メソッドを追加しましたが、既に持っている属性に別の属性を追加したいと思います。標準のTextBoxForメソッドの署名は次のとおりです(私の署名は「TextBoxForWithTitle」と呼ばれます)。

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

最後のパラメーターhtmlAttributesは、名前と値のペアのように見えます。(実行時に)カーソルを合わせると、その値は「{class=emailtextbox}」になります。これはRazorビューに追加しました。拡張メソッドでこれに別の名前/値属性を追加するにはどうすればよいですか?辞書にキャストしてみましたが、うまくいきませんでした。

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 に答える