我正在尝试使用System.ComponentModel.DataAnnotations属性验证包含具有验证规则的其他对象的模型,希望默认的MVC实现就足够了:
var obj = js.Deserialize(json, objectInfo.ObjectType);
if(!TryValidateModel(obj))
{
// Handle failed model validation.
}
该对象由基本类型组成,但也包含其他也使用DataAnnotications的类。像这样:
public class Entry
{
[Required]
public Person Subscriber { get; set; }
[Required]
public String Company { get; set; }
}
public class Person
{
public String FirstName { get; set;}
[Required]
public String Surname { get; set; }
}
问题是ASP.NET MVC验证只降低了1级,只评估顶级类的属性,可以在digitallycreated.net/Blog/54/deep-inside-asp.net-上阅读MVC -2-模型元数据和验证。
有谁知道这个优雅的解决方案?我尝试过xVal,但它们似乎使用了非递归模式(http://blog.stevensanderson.com/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/)。
有人必须在此之前遇到此问题吗?如果您正在设计Web服务,那么在模型中嵌套对象似乎并不那么奇怪。
答案 0 :(得分:1)
我建议从codeplex查看Fluent验证。验证规则包含在一个单独的类中(类似于NHibernate和Fluent NHibernate的工作方式)。一个使用lambda来指定要验证的属性,支持子属性。
`
public class MaintainCompanyViewModelValidator : AbstractValidator<MaintainCompanyViewModel>
{
public MaintainCompanyViewModelValidator()
{
RuleFor(model => model.Company.ShortName)
.NotEmpty();
}
`