0

我最近在我的形式實現遠程驗證:遠程驗證原因提交輸入(多提交-按鈕)爲空

視圖模型:

[Remote("IsTagUnique", "myController", "myArea", ErrorMessage = "This tag already exists.")] 
public string tag { get; set; } 

控制器:

 public ActionResult IsTagUnique(string tag) 
     { 
      using (db) 
      { 
       try 
       { 
        var myTag = db.ASAuftraege.Single(m => m.tag == tag); 
         return Json(false, JsonRequestBehavior.AllowGet); 
        }       
       } 
       catch (Exception) 
       { 
        return Json(true, JsonRequestBehavior.AllowGet); 
       } 
      } 
     } 

     [HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult myView(string Send){ 
      // doSomething 
     } 

查看(稱爲「myView」)

@Html.TextBoxFor(m => m.tag) @Html.ValidationMessageFor(m => m.tag) 


<button class="form-button-submit" type="submit" name="Send" value="Send">Send</button> 

驗證工作非常好。

問題是:單擊發送按鈕時,如果沒有手動觸發標記字段的驗證,只需單擊該字段,然後單擊其他位置,在「myView()」函數之前執行「IsTagUnique」函數。這導致我的提交輸入(我實際上有多個發送按鈕,就像視圖中顯示的那樣(當然不同的名稱/值)是空的任何想法我能做什麼?我嘗試通過手動觸發驗證聚焦和模糊標籤字段,通過觸發更改事件不會觸發驗證,雖然

回答

0

搜索了一會兒,我發現這似乎是一個已知的錯誤之後:

當一個表單使用遠程方法來驗證一個字段時,如果在驗證器觸發後按下了一個提交按鈕,那麼一切正常,請求將包含點擊提交按鈕的名稱/值對 但是,當遠程方法是在按下提交按鈕之前未觸發,則結果請求將不包含提交按鈕值/對。

爲我工作一個解決方案是這一個:

$(function() { 
$('button[type=submit]').click(function() { 
    $('<input>').attr({ 
     type: 'hidden', 
     name: this.name, 
     value: this.value 
    }).appendTo($(this).closest('form')); 
}); 
}); 

感謝arturoribes