asp.net-mvc - 如何使用 ASP.NET MVC 2 验证复杂模型

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

public class UserModel
    {
            [Required(ErrorMessage = "Le nom est requis.")]
            [UIHint("String")]
            [DataType(DataType.Text)]
            [DisplayName("Nom")]
            public string Lastname { get; set; }

            [DataType(DataType.Text)]
            [UIHint("String")]
            [DisplayName("Prénom")]
            public string Firstname { get; set; }

            [Required(ErrorMessage="La spécialité principale est requise.")]
            [DisplayName("Spécialité principale")]
            public Speciality PrimarySpeciality { get; set; }

            [DisplayName("Spécialité secondaire")]
            public Speciality SecondarySpeciality { get; set; }
    }

    public class SpecialityModel
    {
        [Required(ErrorMessage = "La spécialité est requise.")]
        public int Id { get; set; }

        public string Name { get; set; }
    }

怎么可能需要第一专业而不是第二专业?
似乎Required 属性只检查可为空但Specialty 永远不会为空。

编辑:

看完这篇文章http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html
我正在重新表述我的问题:如何防止在主对象之前进行子属性验证。如您所见,SecondarySpeciality 不是必需的,但仍然可以验证 Address 类上 DataAnnotation 的原因。
我认为 mvc2 不能与模型验证一起使用。
我应该选择普通模型吗? (这意味着更多的映射,但如果它有效......)

最佳答案

要对复杂对象进行验证,您需要通过创建自己的验证属性来实现自定义验证。我会打出一个简单的例子,但 Phil Haack 在这方面有一篇很棒的文章:

http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

关于asp.net-mvc - 如何使用 ASP.NET MVC 2 验证复杂模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3568359/

相关文章:

asp.net-mvc - mvc 中的 ViewState 与 ViewData?

c# - MVC ASP.NET 从 View 到 Controller 获取 52 个文本框键/值的最佳方法

wpf - WPF的DataGrid验证中的问题-MVVM

authentication - ASP.NET MVC2 应用程序中的第二层身份验证

c# - Entity Framework 4(纯 POCO)上的更新操作问题

c# - 堆栈跟踪 : at System. Web.HttpServerUtility.ExecuteInternal() ||在 MVC 2.0 中执行处理程序的子请求时出错

asp.net-mvc - 如何返回所有 aspnet_compiler 错误(不仅仅是第一个目录中的错误)

c# - 如何解决错误 "The foreign key name was not found on the dependent type "

WPF - MVVM - NHibernate 验证

c# - Fluent 验证和库