客户端有条件的MVC数据注释

时间:2015-09-18 13:14:57

标签: c# jquery asp.net-mvc asp.net-mvc-4 data-annotations

我有一个表单,其中有条件textboxes.i使用mvc dataannotation客户端下拉更改我隐藏两个文本框数据验证错误没有被触发但在控制器我得到模型错误if (ModelState.IsValid)。我怎么能在客户端进行数据注释的条件处理。我不想使用全面验证或其他第三方。 我试图删除data-val- *属性使用jquery仍然得到controller.refer图像中的错误,如果我选择资产类型笔记本电脑然后SIM计划和价格是隐藏数据注释不要开火这是正确的但在控制器上得到错误。 formimage

型号:

[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; }

2 个答案:

答案 0 :(得分:0)

在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.");
    }
}

http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx

上查看更多说明

答案 1 :(得分:0)

如果您尝试手动清除您在视图中未使用的验证错误,则建议您在检查modelstate之前清除它们。 例如:

    [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
                }
   }

在上面的示例中,我已经传递了Model中的值,并且我没有传递任何电子邮件和密码值,因此在控制器中我清除了ModelState中存在的那些Key。