ASP MVC上ViewModel字段的条件validation

标题:ASP MVC上ViewModel字段的条件validation

我有一个关于ASP MVCvalidation的问题。 假设我有以下View模型

public class PersonViewModel { [Required] public string Name {get; set; } [Required] public string Email {get; set; } } 

根据这个,当我提交表单时,MVC将validation两个字段都有值。 但是,在我的网站中,我遇到了可以在全局网站设置中关闭电子邮件的情况,因此模型将仅在表单上呈现名称文本框。 现在,当我提交表单时,它仍然要求我输入电子邮件字段,因为它被指示为“必需”,尽管用户现在无法填写该字段。

使用ASP MVCvalidation时是否有针对此类场景的解决方案?

解决方案是,如果设置了此类设置,则Required在“ Email字段中取消“ Required属性并自行在post上执行validation。 像这样的东西

 [HttpPost] public ActionResult Post(PersonViewModel model) { //replace EmailTurnedOff with your setting if (!EmailTurnedOff && string.IsNullOrWhiteSpace(model.Email)) { ModelState.AddModelError("Email", "Field is Required"); } if (ModelState.IsValid) { //do whatever } return View(model); } 

我似乎找到了解决方案:

 if(EmailTurnedOff) { this.ViewData.ModelState.Remove("Email"); } 

然后,当我调用ModelState.IsValid时,它会给我正确的答案

背叛沟槽喷射 ,这是我在控制器中使用条件[必需]而不是视图模型的方式。 我这样做是因为我只想在我的应用程序中忽略[Required]。

  public ActionResult Update(MyViewModel mVM) { if(mVM.Role == "Role" && mVM.Property == null) { ModelState.Remove("Property"); } if (ModelState.IsValid) { // code... } }