0

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 プロパティは悪用されています。

私のオプションは何ですか?

4

1 に答える 1

0

発生した例外のタイプを明確に識別するCustomValidationAttribute に ExceptionType という名前の Enum を持つことは意味があると思います。

コントローラーでは、exceptionType をチェックし、それに応じて処理します。

try
{

}
Catch(Exception e)
{
 Switch(e.ExceptionType)
 {
     case ExceptionType.Val1:

       // Handle accordingly  
       break;
 }
}
于 2010-06-15T11:28:16.540 に答える