首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC Ajax.beginform部分验证逻辑不一致

MVC Ajax.beginform部分验证逻辑不一致
EN

Stack Overflow用户
提问于 2012-10-15 12:24:40
回答 1查看 407关注 0票数 0

我在Visual 10中使用MVC 3和剃须刀,客户端的验证是不显着的。我有一个要求为用户提供一个保存窗体fs的机会,其中一些必需的字段丢失了。提交具有Ajax.bgein表单结构。

我有下面的JavaScript来捕获提交事件。

代码语言: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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-15 17:39:15

我相信您需要拦截的是表单的提交事件,而不是提交按钮的单击事件。所发生的事情(我怀疑)是,由于验证框架仍然认为您的表单无效,所以它没有提交它,即使您允许单击事件通过您的return true

有一个在验证完成后但在实际发布之前运行javascript的示例here

代码语言:javascript
复制
$(function() { 
    $('#form0').submit(function() { 
        if (!$(this).valid()) { 
            // do your thing
            return true; 
        } 
    }); 
 }); 

ETA:阅读了您的答复后,我想知道问题是否在于验证框架认为您的页面无效,并且您试图覆盖其结论并提交。在这种情况下,我提供的代码永远不会执行,因为提交永远不会发生。

我建议尝试这样做:从模型中对应于3个输入字段的属性中移除所需的属性,并按照我的建议将检查逻辑移到submit函数中。但是,与其说是if(!$(this).valid()),不如只在表单有效的情况下执行代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12895643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档