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

ASP.NET MVC4中的jQuery验证插件和自定义错误消息,jquery,asp.net-mvc-4,jquery-validate,Jquery,Asp.net Mvc 4,Jquery Validate,我试图让客户端验证在ASP/NETMVC4中工作,但没有服务器端属性和数据注释。我希望在我的视图中严格使用jQuery验证插件。这是我的HTML: <form id="mainForm" method="post" action="/Department/Save"> @Html.ValidationSummary("Please correct the errors") <label>Department Name:</label><input ty

我试图让客户端验证在ASP/NETMVC4中工作,但没有服务器端属性和数据注释。我希望在我的视图中严格使用jQuery验证插件。这是我的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" />
一开始,我甚至没有收到任何弹出的错误消息,当我将输入留空时(当我单击submit按钮时),我只是收到了红色的文本框。我原本以为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验证插件中没有名为
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
的文档:

工作演示

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

1) 您已经在其他地方定义了规则和消息,因此,您不需要任何
dataval-
属性

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

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

因此,您只使用jQuery验证插件本身,没有
不引人注目的
对吗?还显示表单的呈现HTML标记。这是我的目标,是的。我是否应该删除对不引人注目的javascript文件的任何引用?好的,是的。我不是ASP专家,但我知道如何让这个插件工作。显示表单的呈现HTML标记,我将向您展示如何正确应用此插件。我想我已经了解了如何显示自定义错误消息,我使用了rules方法(我修改的jQuery代码如上所示)。但是当用户修复错误时,自定义错误消息不会消失。我还显示了上面的呈现表单HTML。我不想从项目中删除不引人注目的文件,因为它在应用程序的其他地方使用。我对ASP如何激活、包含或应用
不引人注目的
验证表单知之甚少,但如果您要保留它,请绝对确保它没有应用到您不想要的地方。。。。i、 e.从任何/所有表单/输入标记中删除所有不必要的属性。
submitHandler: function () {
    // ajax goes here;
    return false;
}