2016-03-08 89 views
0

我有一個像belowe模型:禁用一些驗證,根據提交按鈕

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> 

,並在控制器I有:

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 handel它並正常工作。

但在此情況下點擊SaveAsTemp時不需要BusinessPartner填充。

我不想用if來一個一個的檢查,因爲我的模型比20個字段的字段多 。 有沒有辦法做到這一點?

+0

**這將幫助你definetly ** [如何將條件所需的屬性到類屬性使用WEB API?](http://stackoverflow.com/questions/20642328/how-to-put-conditional-所需的屬性到類的財產工作與網絡a) – CodeConstruct

回答

0

您可以點擊使用JQuery

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

替代#MyForm的SaveAsTemp按鈕與表單ID

或個別領域

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

假設禁用驗證,它的'必需'驗證器

在您的控制器中,您可以disab LE /於特定的Fileds明確的錯誤如下

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

我不想禁用所有的驗證,我想只是禁用其中之一。 –

+0

已更新的答案,是必填字段驗證? –

+0

您的代碼僅在客戶端禁用,並且在控制器驗證中啓用 –