繁体   English   中英

ASP.NET MVC4中的jQuery验证插件和自定义错误消息

[英]jQuery Validation plugin and custom error messages in ASP.NET MVC4

我正在尝试使客户端验证在ASP / NET MVC4中工作,但没有服务器端属性和数据注释。 我想在我的视图中严格使用jQuery Validation插件来做到这一点。 这是我的HTML:

<form id="mainForm" method="post" action="/Department/Save">

@Html.ValidationSummary("Please correct the errors")
<label>Department Name:</label><input type="text" id="DepartmentName" name="DepartmentName"/>  
@Html.ValidationMessageFor(model => model.DepartmentName)
<br />    
<label>Department Name Fr:</label><input type="text" id="DepartmentNameFr" name="DepartmentNameFr"/>
<input type="submit" id="btnSave" value="Save" />

这是我的jQuery脚本:

          $("#formWeek").validate({
          highlight: function (element, errorClass) {
              $(element).add($(element).parent()).addClass("input-validation-error");
          },
          unhighlight: function (element, errorClass) {
              $(element).add($(element).parent()).removeClass("input-validation-error");
          }
      });          

      $('#DateRangeCriteriaWeek').rules('add', {
          required: true,
          regex:"(201[3-9]|20[2-9][0-9])-(0[1-9]|[1-4][0-9]|5[0-3])", 
          messages: {
              required: "Date Range Criteria is required.",
              regex: "Date Range Criteria format is invalid."
          }
      });

刚开始时,我什至没有弹出任何错误消息,当我将输入保留为空白时(单击提交按钮时),我只是得到红色文本框。 我本来以为jQuery会自动显示错误消息,但事实并非如此。 但是,当我添加Html.ValidationSummary帮助程序时,错误消息突然出现。

然后我注意到错误消息是默认消息,而不是我上面定义的自定义消息。 我发现为了显示自定义消息,我不得不使用上面显示的rules方法。 但是现在,当用户更正错误时,消息不会消失。

这是呈现的HTML:

<form id="formWeek" method="post" data-ajax-update="#ProductsDivWeek" data-ajax-success="process('Week')" data-ajax-mode="replace" data-ajax-method="Post" data-ajax="true" action="/Dashboard/Products?Length=9" novalidate="novalidate">
<div>
    <div class="validation-summary-valid" data-valmsg-summary="true">
        <ul>
        <li style="display:none"></li>
        </ul>
    </div>
</div>
<table>
<tbody>
    <tr>
        <td>Date : </td>
        <td>
            <input id="DateRangeFilterWeek" type="hidden" value="FiscalWeek" name="DateRangeFilter">
            <span class="ui-helper-hidden-accessible" role="status" aria-live="polite"></span>
            <input id="DateRangeCriteriaWeek" class="ui-autocomplete-input" type="text" value="21/09/2013" name="DateRangeCriteria" data-val-required="Date Range Criteria is required." data-val="true" autocomplete="off">
        </td>
        <td>
        <input id="btnApplyWeek" type="submit" title="Apply" value="Apply" name="btnApply">
        </td>
    </tr>
</tbody>
</table>

jQuery Validate插件中没有这样的称为regex方法或规则。 您必须使用内置的.addMethod()方法创建此自定义方法。

jQuery.validator.addMethod("regex", function (value, element, param) {
    var regex = new RegExp(param);
    return regex.test(value);
}, "");


$('#DateRangeCriteriaWeek').rules('add', {
    required: true,
    regex: "^(201[3-9]|20[2-9][0-9])-(0[1-9]|[1-4][0-9]|5[0-3])",
    messages: {
        required: "Date Range Criteria is required.",
        regex: "Date Range Criteria format is invalid."
    }
});

请参阅addMethod文档: http : //jqueryvalidation.org/jQuery.validator.addMethod/

工作演示http : //jsfiddle.net/jrLSF/

另外,由于您没有使用unobtrusive.validate.js ...

1)您已经在其他位置定义了规则和消息,因此AFAIK不需要任何data-val-属性。

2)从<form>标记中删除data-ajax-属性,并将任何.ajax()放入submitHandler函数中。

submitHandler: function () {
    // ajax goes here;
    return false;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM