公共类UserModel { [必需(ErrorMessage =“Le nom est requis。”)] [UIHint( “字符串”)] [数据类型(DataType.Text)] [DisplayName的( “标称”)] public string姓氏{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属性只检查nullable,但Specialty永远不会为null。
编辑:
阅读此帖后http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html 我正在重新提出我的问题:如何防止子属性验证在主对象之前发生。正如您所看到的,SecondarySpeciality不是必需的,但仍然可以在Address类上获得DataAnnotation的验证原因。 我认为mvc2不能用于模型验证。 我应该选择普通型号吗? (这意味着更多的映射,但如果它的工作......)
答案 0 :(得分:1)
要对复杂对象进行验证,您需要通过创建自己的验证属性来实现自定义验证。我会输入一个简单的例子,但Phil Haack在这篇文章中有一篇很好的文章:
http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx
答案 1 :(得分:0)
编写您自己的验证器,您可以使用Enum.IsDefined
方法确定Specialty的值是否设置正确。
您只需要创建将从RequiredEnumAttribute
派生并覆盖ValidationAttribute
方法的课程IsValid
。
示例是可用的here。
答案 2 :(得分:0)
您还可以让模型实现IValidatableObject,并使用自定义业务规则服务器端进行验证。这使您有机会基于对象的当前状态进行条件验证。如果属性x = 1,则需要y ...
要使用此功能,您可能需要对提交之前需要进行的属性验证进行放松。