我在 Visual Studio 10 中使用 MVC 3 和 razor 以及客户端不显眼的验证。我需要为用户提供保存表单的机会,因为缺少一些必填字段。提交具有 Ajax.bgein 表单结构。
我有以下 JavaScript 来捕获提交事件。
$(document).ready(function () {
$('#submit-11').click(function (event) {
var validator = $("#form0").validate();
if (!$("#form0").valid()) {
// for partial save needs either ID number
// or family name and date of birth
var NameExists = true;
var DateOfBirthExists = true;
var IDNumberExists = true;
if (validator.errorMap["model.FamilyName"]) { NameExists = false; }
if (validator.errorMap["model.DateOfBirth"]) { DateOfBirthExists = false; }
if (validator.errorMap["model.IDNumber"]) { IDNumberExists = false; }
if (IDNumberExists || (NameExists && DateOfBirthExists)) {
if ($("#model_PartialSave").attr('checked')) {
// partial save has been requested
alert("saving");
return true; // AJAX save is NOT triggered
}
$("#AgreePartialSave").show();
$("#model_PartialSave").removeAttr('checked');
}
return false;
}
return true; // AJAX save IS triggered
});
}); //document ready end
逻辑似乎是正确的 - 我已经在 firebug 中跟踪了这一点 - 并且触发了警报,但 AJAX 提交调用没有发生。如果表单有效,则会发生 AJAX 提交调用。
我也尝试过event.preventDefault();
,但这会阻止任何保存的发生。
我也在萤火虫中追踪了这一点,似乎所有正确的调用都在进行。
感激地收到任何帮助。
更新
似乎这可能是 Microsoft Ajax 库中的一个限制。有关详细信息和解决方法,请参阅此链接。