2012-03-29 9 views
0

したがって、すべての必須フィールドに追加するカスタム属性に関する問題があります。今度は、必要に応じてこの属性を入力に含めるようにすべてのヘルパークラスを拡張するのではなく、時間を大幅に節約し、それをカスタム必須属性自体に追加できるかどうかを考えました。mvc ValidationAttribute拡張子を使用してフィールドにカスタム属性を追加する

このような何か:

モデル:

[MyCustomRequiredValidator] < --IがvalidationAttribute拡張子に 公共int型を、それを追加したいですか? myField

私は明らかにModelClientValidationRuleを使ってそれを追加することはできません。なぜなら、それは属性にdata-valという接頭辞が付いているためですが、それは良いことではありませんが、属性自体にアクセスできないようです。私はmetadata.AdditionValue.addを使用してみましたが、そこには喜びはありません。

私が追加したい属性は、スクリーンリーダーのサポートのためにaria-required = "true"です。

これは可能ですか?

私は壁にぶつかったので、どんなアドバイスも素晴らしいだろう。

ありがとうございます。

答えて

1

それで私は解決策を見いだしました。私は(私もクラス宣言にIMetadataAwareインターフェイスを継承しなければならなかった)メタデータの作成に必要なすべてのバリデータによるメタデータにタグを追加しました:

public void OnMetadataCreated(ModelMetadata metadata) { 
    metadata.AdditionalValues.Add("AriaRequired", "true"); 
} 

私はその後、確認するために、すべての入力フィールドヘルパーを拡張しましたこの値を入力し、上記の属性(この場合はAriaRequired)の存在をチェックして、入力にカスタム属性を追加します。

if (htmlAttributes == null) htmlAttributes = new Dictionary<string, object>(); 

    if (!htmlAttributes.ContainsKey("aria-required")) 
    { 
     ModelMetadata metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); 
     htmlAttributes.Add("aria-required", metaData.IsAriaRequiredValue()); 
    } 
} 

これは

:-)人の役に立てば幸い
関連する問題