我有一个表单,其中有条件文本框。我使用了mvc数据注解客户端的下拉更改,我隐藏了两个文本框,数据验证错误没有触发,但在控制器中,我在if (ModelState.IsValid).How中得到模型错误,我只能在客户端做数据注解的条件处理。我尝试使用jquery删除controller.refer图像中的data-val-*属性,如果我选择资产类型笔记本电脑,那么sim plan和price是隐藏的,数据注释不会触发,这是正确的,但在控制器上得到错误。

型号:
[Required(ErrorMessage = "Please Enter Make")]
public string Make { get; set; }
[Required(ErrorMessage = "Please Enter Model")]
public string Model { get; set; }
[Required(ErrorMessage = "Please Enter Sim Plan")]
public string SimPlan { get; set; }
[Required(ErrorMessage = "Please Enter Price")]
public decimal? Price { get; set; }发布于 2015-09-18 22:02:01
在MVC3中添加条件验证规则有更好的方法。让你的模型继承IValidatableObject并实现Validate方法:
public class Person : IValidatableObject
{
public string Name { get; set; }
public bool IsSenior { get; set; }
public Senior Senior { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (IsSenior && string.IsNullOrEmpty(Senior.Description))
yield return new ValidationResult("Description must be supplied.");
}
}发布于 2015-09-19 19:17:12
如果您试图手动清除未在视图中使用的验证错误,那么我建议您在检查模型状态之前清除它们。例如:
[HttpPost]
public ActionResult Register(Model objModel )
{
foreach (string Key in ModelState.Keys)
{
if ((Key.Equals("Email")) || (Key.Equals("Password")))
{
ModelState[Key].Errors.Clear();
}
}
if (ModelState.IsValid)
{
//Do the work
}
}在上面的例子中,我已经传递了模型中的值,并且我没有传递任何电子邮件和密码的值,所以在控制器中,我清除了ModelState中存在的那些键。
https://stackoverflow.com/questions/32652958
复制相似问题