![](/img/trans.png)
[英]ViewModel nesting and having business logic dependant validation using IValidatableObject
[英]Recursive validation using annotations and IValidatableObject
我試圖使用注釋和一些自定義代碼驗證嵌套對象(不是MVC senss中的模型)。
我發現以下帖子很有用
正如在答案中所建議的,我在容器類中創建了一個額外的例程來驗證嵌套對象。 這是我修改過的測試代碼
public class Customer : IValidatableObject
{
public Customer()
{
Details = new CustomerDetails();
}
[Required]
[MaxLength(2)]
public string Name
{
get;
set;
}
public CustomerDetails Details
{
get;
private set;
}
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var context = new ValidationContext(this.Details, validationContext.ServiceContainer, validationContext.Items);
var results = new List<ValidationResult>();
Validator.TryValidateObject(this.Details, context, results);
return results;
}
}
但是,即使在將validateAllProperties設置為true的情況下調用TryValidateObject時,我也無法獲得所有驗證錯誤。
var context = new ValidationContext(cs, null, null);
var results = new List<ValidationResult>();
Validator.TryValidateObject(cs, context, results,true);
如果容器中有任何錯誤,則只顯示這些錯誤。 僅當容器對象中沒有錯誤時,才會顯示嵌套對象中的錯誤。 我懷疑它與Validate rouine有關,返回一個完整的列表,而且無法從容器中添加(現有)列表(?)
我可以對常規進行任何修改以顯示所有錯誤嗎?
請參閱此答案: https : //stackoverflow.com/a/3400627/724944
因此,類的屬性中存在錯誤,因此不會調用Validate方法。 我建議像這樣使用CustomValidationAttribute :
[CustomValidation(typeof(Customer), "ValidateRelatedObject")]
public CustomerDetails Details
{
get;
private set;
}
public static ValidationResult ValidateRelatedObject(object value, ValidationContext context)
{
var context = new ValidationContext(value, validationContext.ServiceContainer, validationContext.Items);
var results = new List<ValidationResult>();
Validator.TryValidateObject(value, context, results);
// TODO: Wrap or parse multiple ValidationResult's into one ValidationResult
return result;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.