如何防止Fluent验证在特定条件下验证模型

时间:2015-04-23 11:54:07

标签: asp.net-mvc fluentvalidation

我在表单上有两个不同名称的提交按钮。在控制器中 我有一个HttpPost动作方法,当我点击两个提交按钮时,我会调用它。这是动作方法的内部结构:

public ActionResult Save(Document model){
    if(Request["btnSave"]!=null){
       if (ModelState.IsValid){
         //go ahead and save the model to db
       }
    }else{//I don't need the model to be validated here
       //save the view values as template in cache
    }
}

因此,当名称为" btnSave"的按钮时单击我需要在将模型保存到数据库之前验证模型,但如果单击其他按钮,我不需要任何验证,因为我只是将表单值保存在缓存中以便稍后再调用它们。显然,在这种情况下,我不需要验证任何内容。我使用Fluent验证。我的问题是无论我按哪个按钮,我都会收到警告。我可以控制何时FV应该验证模型吗?

1 个答案:

答案 0 :(得分:2)

您可以将属性btnSave添加到模型中:

public class Document
{
    public string btnSave {get; set;} // same name that button to correctly bind
}

在验证器中使用条件验证:

public class DocumentValidator : AbstractValidator<Document>
{
    public DocumentValidator()
    {
        When(model => model.btnSave != null, () =>
        {
            RuleFor(...); // move all your document rules here
        });

        // no rules will be executed, if another submit clicked
    }
}