モデルにいくつかの検証メタデータがあります。
[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;
}
ただし、検証ピースが呼び出されるまでこのコードは実行されないため、フォームが投稿を試みるまでメタデータは更新されません。
ページの読み込み時に動的必須タグのメタデータを更新して、必須フィールド インジケーターが引き続き機能するようにする方法はありますか?