0

モデルにいくつかの検証メタデータがあります。

 [RequiredIf("IsNewCustomer", true, ErrorMessage="Tax ID is missing")]
    public string TaxIDNumber { get; set; }

また、必須フィールドの横にアスタリスクを配置する標準の LabelHelper コードもあります。

   if (displayOptions == DisplayOptions.ShowRequired && metadata.IsRequired )
        {
            //... add span html
        }

メタデータ タグが [必須] の場合、このコードは正常に機能します。ただし、RequiredIf または RequiredIfTrue を使用すると、isRequired プロパティは常に false に設定されます。ただし、検証は送信時に引き続き機能します。モデル状態が無効で、エラー メッセージが表示されます。

DataAnnotationsModelMetadataProvider へのカスタム オーバーライドを作成しようとしました。

        protected override ModelMetadata CreateMetadata(System.Collections.Generic.IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
    {
        var _default = base.CreateMetadata(attributes, containerType, modelAccessor,                       modelType, propertyName);
        _default.IsRequired = attributes.Where(x => x is RequiredAttribute).Count() > 0;
        return _default;
    }

ただし、検証ピースが呼び出されるまでこのコードは実行されないため、フォームが投稿を試みるまでメタデータは更新されません。

ページの読み込み時に動的必須タグのメタデータを更新して、必須フィールド インジケーターが引き続き機能するようにする方法はありますか?

4

0 に答える 0