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 的枚举是有意义的,它清楚地标识了引发的异常的类型。

在控制器中,我们可以检查异常类型并进行相应的处理。

try
{

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

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