0

そのため、すべての必須フィールドに追加したいカスタム属性に問題があります。ここで、すべてのヘルパー クラスを拡張して、必要に応じてこの属性を入力に含めるのではなく、多くの時間を節約して、それをカスタムの必須属性自体に追加できないかと考えました。

このようなもの:

モデル:

[MyCustomRequiredValidator]<--validationAttribute 拡張 public int に追加しますか? マイフィールド

属性の前に data-val- が付いているため、ModelClientValidationRule を介して追加することはできませんが、これは良くありませんが、属性自体にアクセスできないようです。metadata.AdditionValue.add を使用してみましたが、喜びはありません。

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

これは可能ですか?

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

見てくれてありがとう。

4

1 に答える 1

1

OK、それだけの価値があるので、解決策を見つけました。メタデータの作成時に必要なすべてのバリデーターを介してメタデータにタグを追加しました (クラス宣言で 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());
    }
}

これが人々に役立つことを願っています:-)

于 2012-04-11T10:19:19.250 に答える