我有一個解決方案,目前我正在使用。我使用Fluent validation,我仍然習慣它。我可以給你一個簡單場景的例子。也許它有幫助。我有一個用戶類,具有一個地址對象屬性。在某些時候,我只想驗證用戶的詳細信息(姓名,電子郵件,密碼等),並在另一個州想驗證用戶地址(第一行,郵政編碼等)。
類是這樣的:
public class User {
public virtual string Name { get; set; }
public virtual string Email { get; set; }
public virtual string Password { get; set; }
public virtual Address Address { get; set; }
}
public class Address {
public virtual string Address1 { get; set; }
public virtual string PostCode { get; set; }
}
然後我有兩個(simplfied)驗證,一個地址和一個用於用戶:
public AddressValidator() {
RuleFor(address => address.Address1)
.NotNull()
.WithMessage("Please enter the first line of your address");
RuleFor(address => address.PostCode)
.NotNull()
.WithMessage("Please enter your postcode")
.Matches(UK_POSTCODE_REGEX)
.WithMessage("Please enter a valid post code!");
}
public UserValidator() {
RuleFor(user => user.FirstName)
.NotNull()
.WithMessage("Please provide a first name")
.Length(3, 50)
.WithMessage("First name too short");
RuleFor(user=> user.Password)
.Length(8, 50)
.WithMessage("Password is too short");
}
然後我創建了一個模型驗證,所以例如,假設我們有一個用戶輸入地址的表單,我們創建一個AddressModelValidator,並且可以重新使用我們所寫的驗證器:
public AddressModelValidator() {
RuleFor(user => user.id)
.NotNull()
.WithMessage("An error has occured, please go back and try again");
RuleFor(user => user.Address).SetValidator(new AddressValidator());
}
所以,有些想法,你真的可以創建一些不錯的模型,並減少驗證碼重複!
這很接近,但一個對象具有不同的狀態呢? – dariol 2010-01-18 00:13:40