注释模型列表的验证

本文关键字:验证 列表 模型 注释 | 更新日期: 2023-09-27 18:30:12

我真的不确定标题是否清晰。让我更好地解释一下:

我有两种型号:

1-客户响应cs:

public class GuestResponse
    {
        [Required(ErrorMessage="Please enter your name")]
        public string Name { get; set; }
        [Required(ErrorMessage = "Please enter your email address")]
        [RegularExpression(".+''@.+''..+", ErrorMessage="Please enter a valid email address")]
        public string Email { get; set; }
        [Required(ErrorMessage = "Please enter your phone number")]
        public string Phone { get; set; }
        [Required(ErrorMessage = "Please especify wheter you will attend")]
        public bool? WillAttend { get; set; }
    }

2-公司客户响应cs:

public class CompanyGuestResponse
    {
        [Required(ErrorMessage = "Please enter your company name")]
        public string Name { get; set; }
        [Required(ErrorMessage = "Please enter your company email address")]
        [RegularExpression(".+''@.+''..+", ErrorMessage = "Please enter a valid email address")]
        public string Email { get; set; }
        [Required(ErrorMessage = "Please enter your company phone number")]
        public string Phone { get; set; }
        public IList<GuestResponse> GuestResponses { get; set;} 
    }

我还有一个CompanyGuestResponse模型的强类型视图,其中有一个带有表的窗体,该窗体允许用户为属性GuestResponse提供输入。

我希望只有在表中已填充的行被正确验证(即,不要尝试验证未填充的行)并且至少有一行被正确填充的情况下,才能提交表单。

我试图通过为List创建ViewModel验证中描述的自定义注释来实现这一点,但没有成功(mvc只是忽略了列表注释,并在GuestResponse类中验证了注释):

[EnsureOneElementAttribute(ErrorMessage = "At least a person is required")]
public IList<GuestResponse> GuestResponses { get; set;} 

结果:

http://postimage.org/image/b2jn7ta69/

注释模型列表的验证

我所理解的是,你想在模型本身上验证,而不是在每个字段上验证,所以你可以删除属性上的[Required]属性,并在操作中验证是否有任何字段被填充,如果是,则继续其他操作,添加一个错误,不要将其与任何字段关联

所以我要告诉你的是,在这个案例中去掉注释,并手动检查