如何使用ASP.NET MVC 2验证复杂模型?

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

        [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


编写您自己的验证器,您可以在其中使用Enum.IsDefined方法来确定专业的值是否正确设置。

您只需创建将从ValidationAttribute派生并重写IsValid方法的类RequiredEnumAttribute

示例在这里可用。

链接地址: http://www.djcxy.com/p/56603.html

上一篇: How can I validate a complex model using ASP.NET MVC 2

下一篇: User registration page, with a defined user MODEL (MVC )