2010-10-28 63 views
3

Asp.Net MVC中有一種方法可以使用某種流暢的驗證嗎?Asp.Net MVC - FluentValidation

我的手段,而不是驗證我的POCO這樣的:

public class User { 

    [Required] 
    public int Id { get; set; } 

有類似的東西(在外部類):

User.Validate("Required", "Id"); 

的是,在Asp.Net MVC 2的東西可能(或3)?

我知道FluentValidation庫存在,但我想知道是否在Asp.Net MVC的核心內容允許。

我不喜歡這樣污染我的POCO。另外,如果我需要驗證讓我們說BeginDate在EndDate之前會發生什麼?有了屬性,你不能那樣做。

回答

9

FluentValidation整合得很好with ASP.NET MVC。它帶有一個允許自動應用驗證規則的模型聯編程序。

因此,例如:

[Validator(typeof(MyViewModelValidator))] 
public class MyViewModel 
{ 
    public int? Id { get; set; } 
    public DateTime StartDate { get; set; } 
    public DateTime EndDate { get; set; } 
} 

public class MyViewModelValidator : AbstractValidator<MyViewModel> 
{ 
    public MyViewModelValidator() 
    { 
     RuleFor(x => x.Id) 
      .NotNull(); 
     RuleFor(x => x.EndDate) 
      .GreaterThan(x => x.StartDate); 
    } 
} 

,然後你的控制器動作:

[HttpPost] 
public ActionResult Index(MyViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     // The model is valid => process it 
     return RedirectToAction("Success"); 
    } 
    // Validation failed => redisplay the view in order to show error 
    // messages 
    return View(model); 
} 
+0

但我認爲,客戶端驗證是不完美? – Melursus 2010-10-28 19:34:14

+0

不,它不是完美的,但它可以像'NotNull'這樣的簡單規則。對於自定義函數,您需要編寫自定義客戶端驗證。 – 2010-10-28 20:32:53

相關問題