有如下一个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)
{
}
}
如果你使用的是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);
}
可以给这个属性一个默认值
我也觉得可能用默认值会好点。
可以引入ViewModel,ViewModel在View和Controller之间传递,而不是直接传递Model,在Controller内部接收到ViewModel后,再转换为Model,这样既可以根据自己的需求,去处理验证的问题了