17

我在 ASP.net MVC 3 中有以下视图:

@model Models.CreateProjectViewModel

<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script>

@using( Html.BeginForm() ) {
    @Html.TextBoxFor(m => m.ProjectName)
    @Html.ValidationMessageFor(m => m.ProjectName)

    <p>
        <input type="submit" value="Save" />
    </p>
}

我正在使用带有 jQ​​uery 和 Fluent Validation 框架的不显眼的 javascript。

当我单击“保存”按钮并且验证失败时,是否有一些事件可以挂钩来调用一些自定义 javascript?

function validationFailed() {
    // do something here only if validation failed
}

我将如何绑定验证,以便在它失败时(并且只有在它失败时)我可以调用我的 validationFailed() 函数。

4

2 回答 2

36

正如 jQuery/Validation 文档所说,您可以使用invalidHandler在提交无效表单时做出反应。

但是由于 MVC 不显眼的验证实例化了 Validation 本身,因此您必须稍后挂钩此事件。

使用与 jQuery/Validation 完全相同的机制:您可以将代码绑定到表单元素自定义事件' invalid-form.validate ',对应于 invalidHandler!

$(document).ready(function() {
    $('#myform').bind('invalid-form.validate',function(){
        alert('invalid form!');
    });
});

给你的表格一个 id 使用:

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myform" })) {
} 

更新:

获取现有验证对象的另一种方法是在表单上调用validate()。如果该表单的验证器已经创建,它将被返回:

编辑:初始化发生后,更改.settings.invalidHandler为时已晚无法绑定。因此,除非您重新初始化验证器,否则以下代码段将 [不再] 起作用。

$(document).ready(function() {
    var existingValdiation = $("#myform").validate();
    //the settings property corresponds to the options parameter
    existingValdiation.settings.invalidHandler = function (form) {
        alert('invalid form!');
    };
    // not recommended:
    // re-init would bind settings.invalidHandler to 'invalid-form.validate'
    // existingValdiation.init();
});
于 2011-10-08T18:09:11.657 回答
4

您可以使用invalidHandler,我相信这是在 jquery 验证中。

invalidHandler Callback
提交无效表单时自定义代码的回调。使用事件对象作为第一个参数调用,验证器作为第二个参数。

于 2011-10-04T17:18:10.017 回答