0

我正在使用ASP.NET MVC4jQuery ValidatejQuery Validate unobtrusive遠程操作方法沒有使用jQuery驗證驗證

我在窗體上有各種元素,但我只需要驗證一個元素。其他元素不需要需要驗證。基本上會發生什麼是我有一個接受一個數字的文本框和一個按鈕(不是來提交表格),它接受這個texbox中的數字,並進行遠程調用以檢查數字是否存在,如果不存在,那麼它必須顯示一條錯誤消息。

我的看法代碼:

<td class="edit-label">Change Control ID/Incident Number: <span class="required">**</span></td> 
<td> 
    @Html.TextBoxFor(x => x.ChangeIncidentNumber) 
    <button id="verifyButton" type="button">Verify</button> 
    @Html.ValidationMessageFor(x => x.ChangeIncidentNumber) 
</td> 

我的視圖模型:

public class SearchServerViewModel 
{ 
    // Partial view model 

    public string ChangeIncidentNumber { get; set; } 
} 

我的HTML輸出的文本框:

<td class="edit-label">Change Control ID/Incident Number: <span class="required">**</span></td> 
<td> 
    <input data-val="true" data-val-required="Required" id="ChangeIncidentNumber" name="ChangeIncidentNumber" type="text" value="792952" /> 
    <button id="verifyButton" type="button">Verify</button> 
    <span class="field-validation-valid" data-valmsg-for="ChangeIncidentNumber" data-valmsg-replace="true"></span> 
</td> 

我的jQuery代碼:

<script src="/Assets/JavaScripts/jquery-validate/jquery.validate.min.js"></script> 
<script src="/Assets/JavaScripts/jquery-validate/jquery.validate.unobtrusive.min.js"></script> 

<script> 

    $(document).ready(function() { 
      $("#ChangeIncidentNumber").validate({ 
       rules: { 
        ChangeIncidentNumber: { 
         required: true, 
         remote: '/Server/ValidateChangeIncidentNumber' 
        } 
       }, 
       messages: { 
        ChangeIncidentNumber: { 
          required: "Required", 
          remote: "custom message:" 
        } 
       } 
      }); 

      $('#verifyButton').click(function() { 
       var isValid = $('#ChangeIncidentNumber').valid(); 
      }); 
    }); 

</script> 

我的操作方法:

public ActionResult ValidateChangeIncidentNumber(string ChangeIncidentNumber) 
{ 
    // Do whatever needs to be done 

    return Json("Test error text", JsonRequestBehavior.AllowGet); 
} 

在我的web.config:

<add key="ClientValidationEnabled" value="true" /> 
<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 

所需的部分作品,它如果文本框爲空,顯示所需的消息。但是如果有價值,它不會達到我的行動方法。不知道爲什麼?

+0

你嘗試了** [發佈方法這裏提到](http://stackoverflow.com/a/15921594/2007801)**? – 2013-04-17 10:09:42

回答

0

在包含不顯眼的插件腳本後調用validate()什麼也不做,它只是返回由不顯眼的插件創建的驗證器實例。必需的規則正在工作的唯一原因是因爲您在ChangeIncidentNumber字段中具有[必需]屬性。您可以在呈現的文本框中通過data-val-required =「必需的」來查看。

有沒有[遠程]數據註釋屬性?我認爲你需要調查一下。

+0

我不使用數據註釋。 – 2013-04-10 09:14:15

+0

啊,好吧,流利的驗證或其他方式,相同的答案適用 - 調用驗證(...選項...)不引人注意的插件後不會適用你的選項 – 2013-04-10 10:02:14

+0

很酷,但你會怎麼做呢?你有代碼示例嗎? – 2013-04-10 10:03:39

0

我在表單上有各種元素,但我只需要有一個 元素進行驗證。其他元素不需要驗證

然後爲必須驗證的字段設置必需屬性或自定義屬性。

HTML

<div id="formContainer" 
    data-url="@Url.Action("Action Name", "Controller Name", 
    new { area = "Area Name" })"></div> 

<input id="BTN" type="button" value="Button" /> 

JQuery的(下面的請求可以有GET/POST /的getJSON。所以,改變它相應的)

$('#BTN').click(function() { 
    var $formContainer = $('#formContainer'); 
    var url = $formContainer.attr('data-url'); 
    $formContainer.load(url, function() { 
     var $form = $('#myForm'); 
     $.validator.unobtrusive.parse($form); 
     $form.submit(function() { //Here modification can be buton click     
      var $form = $(this); 
      if ($form.valid()) { 
       $.post(this.action, $(this).serialize(), function (data) { 
        $form.html(data); 
        $form.removeData('validator'); 
        $form.removeData('unobtrusiveValidation'); 
        $.validator.unobtrusive.parse($form); 
       }); 
      } 
      return false; 
     }); 
    }); 
    return false; 
}); 
+0

我確實設置了它只驗證文本框。與你和我的代碼有什麼不同?我看到你有一個表單提交??我沒有提交表單,只是一個文本框的值。 – 2013-04-10 09:15:00