2010-06-15 29 views
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屬性就被濫用了。

我有什麼選擇?

回答

0

我認爲有意義的在CustomValidationAttribute中有一個名爲ExceptionType的Enum,它清楚地標識了引發的異常類型。

在控制器中,我們可以檢查exceptionType並相應地進行處理。

try 
{ 

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

     // Handle accordingly 
     break; 
} 
} 
+0

嗯,我不明白這將如何與modelbinding工作。在調用動作之前會發生異常。 我也不確定是否只是將設計基於拋出異常在CustomValidationAttribute.IsValid方法中是一個好主意。我的意思是,如果我對它的驗證是無效的,我應該簡單地返回false。 – 2010-06-16 08:40:09

相關問題