System.ComponentModel.DataAnnotations.ValidationAttribute から派生する独自の検証属性を作成したので、その特定の属性がモデルで有効かどうかをコントローラーから検出できるようにしたいと考えています。
私のセットアップ:
public class MyModel
{
[Required]
[CustomValidation]
[SomeOtherValidation]
public string SomeProperty { get; set; }
}
public class CustomValidationAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
// Custom validation logic here
}
}
では、CustomValidationAttribute の検証が成功したかどうかをコントローラーから検出するにはどうすればよいでしょうか。
ModelState で ModelError の Exception プロパティを見てきましたが、CustomValidationAttribute からそれにカスタム例外を追加する方法がありません。
今、私は ModelState で特定のエラー メッセージを確認することに頼っています。
public ActionResult PostModel(MyModel model)
{
if(ModelState.Where(i => i.Value.Errors.Where((e => e.ErrorMessage == CustomValidationAttribute.SharedMessage)).Any()).Any())
DoSomeCustomStuff();
// The rest of the action here
}
CustomValidationAttribute を次のように変更しました。
public class CustomValidationAttribute : ValidationAttribute
{
public static string SharedMessage = "CustomValidationAttribute error";
public override bool IsValid(object value)
{
ErrorMessage = SharedMessage;
// Custom validation logic here
}
}
文字列の一致に頼るのは好きではありません。このように、ErrorMessage プロパティは悪用されています。
私のオプションは何ですか?