2

次の問題があります。

Data- 属性と特定のクラスを Like so に添付したい Html 要素があります。

<element id="" class="custom_class" data-attribute="value" data-attr-two="value2"></element>

しかし、私はモデルレベルでこれらの属性を次のように定義したい:

public class ModelName 
{
  [DataAnnotation({attribute = "value", attr_2 = "value2"})]
  [Class= "custom_class"]
  public type PropertyName { get; set;}
}

私はカスタム検証属性を認識していますが、それらの問題は要素が次のようになることです:

<element id="" class="custom_class" data-val-attribute="value"/></element>

これではありません:

<element id="" class="custom_class" data-attribute="value"/></element>

これを行う別の方法がある場合は、おそらく次のようにHtmlヘルパーに別の辞書を追加します:

@Html.TextBoxFor(model => Model, new { DataAnnotation : DataAnnotationObjectModel.Create({Message =        "something", Name = "something" }) )

DataAnnotationObject は、使用しているすべてのタイプのデータ属性を持つクラスであり、反復データで事前に列挙されたデフォルト オブジェクトを作成するいくつかのメソッドです。

私はこれができることを知っています:

@Html.TextBoxFor(model => Model, new { data_attr = @item.Value }  )

しかし、私は5つ以上の属性を追加する必要があり、それを実行したいすべてのモデルのすべてのプロパティに対して、プロパティごとに少なくとも3回実行する必要があります。

これを行う方法はありますか?

この質問の理解に問題がある場合は、お気軽にコメントを投稿してください。説明できるよう最善を尽くします

4

1 に答える 1

1

簡単な解決策として、次のように HTML ヘルパーを定義してみてください。

public static MvcHtmlString AttributedTextBoxFor<TModel, TProperty>(this HtmlHelper _helper, Expression<Func<TModel, TProperty>> expression)

コードでは、式から参照されているプロパティを取得できる必要があり (この StackOverflow questionに従ってください)、リフレクションを使用することで、そのプロパティの属性 (PropertyInfo.Attributes) を再度取得できるはずです。それらを取得したら、すべての「data-」属性が定義された匿名オブジェクトを生成し、上記で定義したヘルパーから標準の TextBoxFor を返し、このオブジェクトを渡すことができるはずです。

return _helper.TextBoxFor(expression, myHtmlAttributes);

完全なソリューションを作成する時間はあまりありませんでしたが、数行の定型コードにすぎません。

于 2012-05-27T19:12:05.207 に答える