首页 新闻 会员 周边

mvc3下进行部分更新,如何避免Model验证

0
悬赏园豆:20 [已解决问题] 解决于 2013-08-19 23:14

有一个用户表(用户名,密码,邮箱),还有其它更多的字段,不一一列举了。这个表对应的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隐藏字段)

denny402的主页 denny402 | 初学一级 | 园豆:184
提问于:2013-08-15 16:19
< >
分享
最佳答案
1

你的这个问题有两种解决办法

1、[Bind(Include = "Name,Password")]加标签的形式要验证什么字段。

2、ModelState.Remove("Name") 去掉不需要验证的属性。

收获园豆:15
小兵仔 | 小虾三级 |园豆:1240 | 2013-08-15 17:29

我把[Bind(Include = "Name,Password")]加到action上时,提示错误:特性 Bind 在该声明类型中无效。它只在 class, param 声明中有效。如果加到Controller这种 class上,就不太符合要求了。

denny402 | 园豆:184 (初学一级) | 2013-08-15 22:07

@denny402: 我这怎么可以,你用第二种方式呢

小兵仔 | 园豆:1240 (小虾三级) | 2013-08-16 09:03

@小兵仔: 排除的字段太多,有点麻烦,最后我用ViewModel解决了。谢谢

denny402 | 园豆:184 (初学一级) | 2013-08-19 23:13

@denny402: 你好,我现在也遇到这个问题了,请问你用ViewModel解决,是怎么做的啊?

Engilu | 园豆:200 (初学一级) | 2014-05-21 19:57
其他回答(2)
1

ModelState.IsValidField

用这个可以验证指定的要验证的字段

 例子:

http://blog.csdn.net/jiangzhengdong/article/details/7464692

收获园豆:5
悟行 | 园豆:12559 (专家六级) | 2013-08-15 16:32
0

只对需要更新的字段封装一个实体

Rookier | 园豆:652 (小虾三级) | 2014-06-18 11:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册