有一个用户表(用户名,密码,邮箱),还有其它更多的字段,不一一列举了。这个表对应的Model设置了属性验证。
[Key] [Display(Name="用户名:")] [Required(ErrorMessage="用户名不能为空")] [Remote("UserIsExist","Login",ErrorMessage="该用户名已经被占用",HttpMethod="post")] public virtual string UserName { get; set; } [Display(Name = "密码:")] [ScaffoldColumn(false)] [Required(ErrorMessage = "密码不能为空")] [DataType(DataType.Password)] [StringLength(50, ErrorMessage = "密码长度不能小于3位", MinimumLength = 3)] public virtual string PassWord { get; set; }
[Display(Name = "电子邮箱:")] [Required(ErrorMessage = "邮箱不能为空")] [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}",ErrorMessage="请输入正确的邮箱格式")] public virtual string Email { get; set; }
现在的问题是:在某一个页面,我要对用户的资料进行更新,如邮箱,QQ,电话等,用户名和密码是不更新的。但是在提交更新时,会自动对用户名和密码进行验证,无法通过,ModelState.IsValid永远都是false,请问进行部分字段更新时,如何避免其它字段的验证?
(不能用hidden隐藏字段)
你的这个问题有两种解决办法
1、[Bind(Include = "Name,Password")]加标签的形式要验证什么字段。
2、ModelState.Remove("Name") 去掉不需要验证的属性。
我把[Bind(Include = "Name,Password")]加到action上时,提示错误:特性 Bind 在该声明类型中无效。它只在 class, param 声明中有效。如果加到Controller这种 class上,就不太符合要求了。
@denny402: 我这怎么可以,你用第二种方式呢
@小兵仔: 排除的字段太多,有点麻烦,最后我用ViewModel解决了。谢谢
@denny402: 你好,我现在也遇到这个问题了,请问你用ViewModel解决,是怎么做的啊?
ModelState.IsValidField
用这个可以验证指定的要验证的字段
例子:
只对需要更新的字段封装一个实体