根据提交按钮禁用一些验证

时间:2016-03-08 11:07:19

标签: c# asp.net-mvc

我有一个类似于下面的模型:

 public class AddPurchaseViewModel
{
    [Required(ErrorMessage="Please enter ...")]
    public string InvoiceNumber { get; set; }

    [Required(ErrorMessage="Please enter ...")]
    public DateTime InvoiceDate { get; set; }

    [Required(ErrorMessage="Please enter ...")]
    public Guid BusinessPartnerId { get; set; 

}

在视图中我有两个提交按钮,如下所示:

<button type="submit" class="btn btn-success" name="command" value="save">Save</button>
<button type="submit" class="btn btn-warning" name="command" value="SaveAsTemp" >Save And Temp</button></li>

在控制器中我有:

 public virtual ActionResult Create(AddPurchaseViewModel purchaseViewModel, string command)
    {
        if (!ModelState.IsValid)
            return View(purchaseViewModel);
        var result = AddPurchaseStatus.AddFailed;
        if (command.ToLowerWithTrim()== "Save".ToLowerWithTrim())
            result = _purchaseService.Add(purchaseViewModel);
        else
            result = _purchaseService.AddAsTemp(purchaseViewModel);
        return View();
    }

我希望当用户点击“提交”按钮Save时,用户应该填写本案例中的所有文本框,ModelState将其处理并正常工作。

但是在这种情况下点击SaveAsTemp时,不要要求BusinessPartner填写。

我不希望逐一检查If因为我的模型有超过20个字段 。  有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

您可以使用JQuery单击SaveAsTemp按钮来禁用验证

$('input[type="button"][value="SaveAsTemp "]').click(function() {
    var settngs = $.data($('#MyForm'), 'validator').settings;
    settngs.ignore = ".ignore";
});

用表单ID替换#MyForm

或个人字段

$("#SomeValue").removeAttr("data-val-required");

假设它是“必需”验证器

在您的控制器中,您可以按如下方式禁用/清除特定文件的错误

ModelState["MyField"].Errors.Clear();

答案 1 :(得分:0)