使用jQuery Validate不会命中远程操作方法

我正在使用ASP.NET MVC4jQuery ValidatejQuery Validate unobtrusive

我的表单上有各种元素,但我只需要validation一个元素。 其他元素不需要validation。 基本上发生的事情是我有一个接受数字的文本框,以及一个按钮( 提交表格),它接受该texbox中的数字并进行远程调用以检查数字是否存在,如果不存在则必须显示错误信息。

我的观点代码:

 Change Control ID/Incident Number: **  @Html.TextBoxFor(x => x.ChangeIncidentNumber)  @Html.ValidationMessageFor(x => x.ChangeIncidentNumber)  

我的观点模型:

 public class SearchServerViewModel { // Partial view model public string ChangeIncidentNumber { get; set; } } 

我的文本框HTML输出:

 Change Control ID/Incident Number: **      

我的jQuery代码:

    $(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(); }); });  

我的行动方法:

 public ActionResult ValidateChangeIncidentNumber(string ChangeIncidentNumber) { // Do whatever needs to be done return Json("Test error text", JsonRequestBehavior.AllowGet); } 

在我的web.config中:

   

所需部分有效,如果文本框为空,则显示必填消息。 但如果有一个值,它就没有达到我的行动方法。 不知道为什么?

在包含不显眼的插件脚本之后调用validate()什么都不做,它只返回由不显眼的插件创建的validation器实例。 所需规则正常工作的唯一原因是因为您在ChangeIncidentNumber字段上有[Required]属性。 您可以通过渲染文本框中的data-val-required =“Required”来查看。

是否有[Remote]数据注释属性? 我想你需要调查一下。

我的表单上有各种元素,但我只需要validation一个元素。 其他元素不需要validation

然后,仅为那些需要validation的字段设置必需属性或自定义属性。

HTML

 

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; });