我在Visual 10中使用MVC 3和剃须刀,客户端的验证是不显着的。我有一个要求为用户提供一个保存窗体fs的机会,其中一些必需的字段丢失了。提交具有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();,但这可以防止任何保存的发生。
我还在firebug中追踪到了这一点,所有正确的电话似乎都在发出。
任何感激的帮助。
更新
这似乎是Microsoft Ajax库中的一个限制。关于细节和工作的See this link。
发布于 2012-10-15 17:39:15
我相信您需要拦截的是表单的提交事件,而不是提交按钮的单击事件。所发生的事情(我怀疑)是,由于验证框架仍然认为您的表单无效,所以它没有提交它,即使您允许单击事件通过您的return true。
有一个在验证完成后但在实际发布之前运行javascript的示例here。
$(function() {
$('#form0').submit(function() {
if (!$(this).valid()) {
// do your thing
return true;
}
});
}); ETA:阅读了您的答复后,我想知道问题是否在于验证框架认为您的页面无效,并且您试图覆盖其结论并提交。在这种情况下,我提供的代码永远不会执行,因为提交永远不会发生。
我建议尝试这样做:从模型中对应于3个输入字段的属性中移除所需的属性,并按照我的建议将检查逻辑移到submit函数中。但是,与其说是if(!$(this).valid()),不如只在表单有效的情况下执行代码。
https://stackoverflow.com/questions/12895643
复制相似问题