使用jQuery Validate不会命中远程操作方法
我正在使用ASP.NET MVC4
和jQuery Validate
和jQuery 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; });