2010-09-30 120 views
3

我在ASP.NET MVC 2使用數據註釋一些問題,驗證例如,我有地址類:驗證在ASP.NET MVC 2

public class Address 
{ 
    public long Id { get; set; } 

    [Required] 
    public string City { get; set; } 

    [Required] 
    public string PostalCode { get; set; } 

    [Required] 
    public string Street { get; set; } 
} 

和秩序類:

public class Order 
{ 
    public long Id { get; set; } 

    public Address FirstAddress { get; set; } 

    public Address SecondAddress { get; set; } 

    public bool RequireSecondAddress { get; set; } 
} 

我想一直驗證Order.FirstAddress,但是Order.SecondAddress只有在Order.RequireSecondAddress設置爲true的情況下才會生效。

任何想法? :)

克里斯

回答

3

這幾乎是不可能用數據說明,否則將需要寫醜陋的代碼依賴於反射,等...(我想你明白了吧)。我建議你看看FluentValidation。它有一個很好的integration with ASP.NET MVC。這是你的驗證邏輯如何可能看起來像:

public class AddressValidator : AbstractValidator<Address> 
{ 
    public AddressValidator() 
    { 
     RuleFor(x => x.City) 
      .NotEmpty(); 
     RuleFor(x => x.PostalCode) 
      .NotEmpty(); 
     RuleFor(x => x.Street) 
      .NotEmpty(); 
    } 
} 

public class OrderValidator : AbstractValidator<Order> 
{ 
    public OrderValidator() 
    { 
     RuleFor(x => x.FirstAddress) 
      .SetValidator(new AddressValidator()); 
     RuleFor(x => x.SecondAddress) 
      .SetValidator(new AddressValidator()) 
      .When(x => x.RequireSecondAddress); 
    } 
} 

也將具有也可能是unit tested in a very elegant way一個獨立的驗證層中受益。

+0

在FluentValidator有在客戶端的一些問題,比較複雜的驗證,但我認爲這不是一個大事件。現在我要進一步瞭解FluentValidator :)謝謝! – Chris 2010-09-30 12:52:39