首页 新闻 会员 周边 捐助

关于model动态验证的问题

0
悬赏园豆:50 [待解决问题]

有如下一个model类Person 对应了数据库的一个表Persons,并且都设置了字段为必填,怎么实现在不去掉model中的Required的情况下等到Person类提交到服务器端的时候让某个字段(比如Description)的必填验证失效以便让它顺利提交到数据库中

[Key]
public string Id{ get; set; }

[Display(Name = "姓名")]
[Required(ErrorMessage = "该项为必填项!")]
public string Name{ get; set; }

[Display(Name = "年龄")]
[Required(ErrorMessage = "该项为必填项!")]
public int Age{ get; set; }

[Display(Name = "描述")]
[Required(ErrorMessage = "该项为必填项!")]
public string Description{ get; set; }

 [HttpPost]
 public ActionResult tempSave(Person person )
 {

  //怎么让Person的某个字段验证在这个地方动态失效而不用去去掉model中Required

  if (ModelState.IsValid)
      {

  }

}

bluefirework的主页 bluefirework | 初学一级 | 园豆:18
提问于:2011-11-10 00:08
< >
分享
所有回答(4)
0

如果你使用的是CodeFirst模式,你可以重载 DbContext 以下两个方法来控制实体验证:

protected override bool ShouldValidateEntity(DbEntityEntry entityEntry)
        {
            return base.ShouldValidateEntity(entityEntry);
        }

        protected override System.Data.Entity.Validation.DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry, IDictionary<object, object> items)
        {
            return base.ValidateEntity(entityEntry, items);
        }

Launcher | 园豆:45050 (高人七级) | 2011-11-10 09:08
0

可以给这个属性一个默认值

artwl | 园豆:16736 (专家六级) | 2011-11-12 19:01
0

我也觉得可能用默认值会好点。

forhells | 园豆:724 (小虾三级) | 2011-11-17 22:58
0

可以引入ViewModel,ViewModel在View和Controller之间传递,而不是直接传递Model,在Controller内部接收到ViewModel后,再转换为Model,这样既可以根据自己的需求,去处理验证的问题了

上不了岸的鱼 | 园豆:4613 (老鸟四级) | 2011-11-24 21:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册