asp.net-mvc - 支持使用 ASP.NET MVC 2.0 进行嵌套模型和类验证

标签 asp.net-mvc validation asp.net-mvc-2 data-annotations asp.net-mvc-2-validation

我正在尝试使用 System.ComponentModel.DataAnnotations 属性来验证包含具有验证规则的其他对象的模型,希望默认的 MVC 实现就足够了:

var obj = js.Deserialize(json, objectInfo.ObjectType);
if(!TryValidateModel(obj))
{
    // Handle failed model validation.
}

该对象由原始类型组成,但也包含其他也使用 DataAnnotations 的类。像这样:
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 服务,则在模型中嵌套对象似乎并不奇怪。

最佳答案

我建议从 codeplex 研究 Fluent Validation。验证规则包含在一个单独的类中(类似于 NHibernate 和 Fluent NHibernate 的工作方式)。一种使用 lambda 来指定要验证的属性,支持子属性。

`

public class MaintainCompanyViewModelValidator : AbstractValidator<MaintainCompanyViewModel>
    {
        public MaintainCompanyViewModelValidator()
        {
            RuleFor(model => model.Company.ShortName)
                .NotEmpty();
        }

`

关于asp.net-mvc - 支持使用 ASP.NET MVC 2.0 进行嵌套模型和类验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3006516/

相关文章:

c# - 在 MVC 中使用GenerateEmailConfirmationTokenAsync 外部 Controller 时出现无效 token

wcf - .Net 3.5 堆栈的 REST API 有哪些选项

asp.net-mvc - ASP.NET MVC 通用模板和集合

c# - ASP.NET - @ 语法和 <% %> 之间的区别?

c# - 为什么我在默认/OOTB Umbraco 安装的 Umbraco SurfaceController 上出现蓝屏死机?

c# - ASP.NET MVC + 填充下拉列表

c# - ASP.NET MVC 2 - Html.EditorFor 可空类型?

ios - objective-c - 如何判断 NSURL 是否被格式化为电话号码

javascript - ASP.NET 中的服务器端验证

javascript - 密码强度验证的正则表达式