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屬性就被濫用了。
我有什麼選擇?
嗯,我不明白這將如何與modelbinding工作。在調用動作之前會發生異常。 我也不確定是否只是將設計基於拋出異常在CustomValidationAttribute.IsValid方法中是一個好主意。我的意思是,如果我對它的驗證是無效的,我應該簡單地返回false。 – 2010-06-16 08:40:09