Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将错误添加到没有键的JQuery非干扰性验证摘要_Jquery_Asp.net Mvc 4_Unobtrusive Validation - Fatal编程技术网

将错误添加到没有键的JQuery非干扰性验证摘要

将错误添加到没有键的JQuery非干扰性验证摘要,jquery,asp.net-mvc-4,unobtrusive-validation,Jquery,Asp.net Mvc 4,Unobtrusive Validation,我有一个表单,它使用了不引人注目的JQuery验证和验证摘要。它工作得很好。但是,此表单执行一个Ajax POST,返回JSON结果。如果结果==true,那么我继续。但是,如果JSON结果返回一个消息数组,我想启动表单验证以更新字段。返回的错误如下所示: { "errors": [ { "key" : "NameFirst", "message": "This is the message" }, { "key" : "NameLast", "messag

我有一个表单,它使用了不引人注目的JQuery验证和验证摘要。它工作得很好。但是,此表单执行一个Ajax POST,返回JSON结果。如果结果==true,那么我继续。但是,如果JSON结果返回一个消息数组,我想启动表单验证以更新字段。返回的错误如下所示:

{
    "errors": [ 
       { "key" : "NameFirst", "message": "This is the message" },
       { "key" : "NameLast", "message": "This is the message" } 
     ]
}
我解析JSON结果并调用barshorrors(),如下所示:

我不能在这些上调用淋浴器,因为它们没有映射到字段标识符。一旦我被告知如何更新摘要,我确信我可以将项目附加到通用消息的列表中,但我愿意接受其他建议。谢谢

更新

这是我最后做的,似乎效果很好。除了对有效的键入错误调用错误外,我还必须手动生成摘要:

var $summary = $form.find("[data-valmsg-summary=true]")
                    .addClass("validation-summary-errors")
                    .removeClass("validation-summary-valid");
var $ul = $summary.find("ul").empty();

var error = {};
$.each(response.errors, function () {
    if (this.key)
        error[this.key] = this.message;
    $("<li />").html(this.message).appendTo($ul);
});
$form.validate().showErrors(error);
var$summary=$form.find(“[data valmsg summary=true]”)
.addClass(“验证摘要错误”)
.removeClass(“有效验证摘要”);
var$ul=$summary.find(“ul”).empty();
var error={};
$.each(response.errors,function(){
如果(此.key)
错误[this.key]=this.message;
$(“
  • ”)html(this.message).appendTo($ul); }); $form.validate().RORS(错误);

  • 我希望这能帮助其他人。

    我遇到了同样的问题,无法找到更干净的方法。这就是我想做的

    代替这个

    for (var j = 0; j < response.errors.length; j++) {
        var key = response.errors[j].key;
        var error = {};
        error[key] = response.errors[j].message;
        $form.data('validator').showErrors(error);
    }
    
    for(var j=0;j
    把这个,

            var error = {}, keyLess = 0;
    
            for (var j = 0; j < response.errors.length; j++) {
                var key = response.errors[j].key;
                error[key || keyLess++] = response.errors[j].message;
            }
    
            $form.validate().showErrors(error);
    
            var container = $form.find("[data-valmsg-summary=true]"), 
                list = container.find("ul");
    
            if (list && list.length) {
                list.empty();
                container
                  .addClass("validation-summary-errors")
                  .removeClass("validation-summary-valid");
    
                $.each(error, function(k,m) {
                    $("<li />").html(m).appendTo(list);
                });
            }
    
    var error={},无键=0;
    对于(var j=0;j”)html(m).appendTo(list);
    });
    }
    
    这基本上就是jQuery.validate.unobtrusive所做的


    您认为如何?

    我需要将自己的自定义错误消息添加到摘要列表中。经过一天左右的阅读jqueryvalidate和untrusivevalidation源代码,这里是我最终使用的解决方案

    首先我申报了我的表格

    @using (Html.BeginForm(null, null, FormMethod.Post, new {id = "formA"}))
    {
        @Html.ValidationSummary()
               .....
               .....
    
    设置id很重要,因为我在javascript代码中使用此id来检索表单对象

    我使用以下代码更新提交时的摘要错误列表

    $(function () {
        var formValidator,
            $form = $("#formA");
    
        // add handler to the forms submit action
        $form.submit(function () {
            if (!formValidator) {
                formValidator = $form.validate({}); // Get existing jquery validate object
            }
    
            var errorList = [];
    
            // get existing summary errors from jQuery validate
            $.each(formValidator.errorList, function (index, errorListItem) {
                errorList.push(errorListItem.message);
            });
    
            // add our own errors
            if (testForErrorCondidtionA()) {
                errorList.push("Please fix error condition A!");
            }
    
            if (testForErrorCondidtionB()) {
                errorList.push("Please fix error condition B!");
            }
    
            // No errors, do nothing
            if (0 === errorList.length) {
                return true; // allow submit
            }
    
            // find summary div
            var $summary = $form.find("[data-valmsg-summary=true]");
    
            // find the unordered list
            var $ul = $summary.find("ul");
    
            // Clear existing errors from DOM by removing all element from the list
            $ul.empty();
    
            // Add all errors to the list
            $.each(errorList, function (index, message) {
                $("<li />").html(message).appendTo($ul);
            });
    
            // Add the appropriate class to the summary div
            $summary.removeClass("validation-summary-valid")
                .addClass("validation-summary-errors");
    
            return false; // Block the submit
        });
    });
    
    $(函数(){
    var formValidator,
    $form=$(“#formA”);
    //将处理程序添加到表单提交操作
    $form.submit(函数(){
    如果(!formValidator){
    formValidator=$form.validate({});//获取现有的jquery验证对象
    }
    var errorList=[];
    //从jQuery验证中获取现有摘要错误
    $.each(formValidator.errorList,函数(索引,errorListItem){
    errorList.push(errorListItem.message);
    });
    //加上我们自己的错误
    if(testForErrorConditionA()){
    errorList.push(“请修复错误条件A!”);
    }
    if(testForErrorConditionB()){
    errorList.push(“请修复错误条件B!”);
    }
    //没有错误,什么也不做
    如果(0==errorList.length){
    返回true;//允许提交
    }
    //查找摘要div
    var$summary=$form.find(“[data valmsg summary=true]”);
    //查找无序列表
    var$ul=$summary.find(“ul”);
    //通过从列表中删除所有元素,从DOM中清除现有错误
    $ul.empty();
    //将所有错误添加到列表中
    $.each(错误列表、函数(索引、消息){
    $(“
  • ”)html(message.appendTo($ul); }); //将适当的类添加到summary div $summary.removeClass(“有效验证摘要”) .addClass(“验证摘要错误”); return false;//阻止提交 }); });
  • 这个提交处理程序总是在不引人注目的处理程序之后调用,这意味着我们从jQuery validate检索的摘要错误列表总是最新的


    希望这个答案能有所帮助,因为一旦您偏离标准案例,不引人注目的验证可能会变得棘手。

    MVC 5错误清除方法(与上述方法略有不同):


    享受吧

    对于我的工作,我添加了如下错误

    var Frm =  "#SomeFrm"
    , $validator = $(Frm).validate();
    
    
    if (SomeNeedValid())
    {
        $validator.errorList.push({"message":"fix error"});
        $(Frm).trigger('invalid-form.validate', validator);
    }
    

    这几乎就是我最后所做的。但是,如果存在未映射到字段名的键,则会引发异常。它似乎传递了一个null元素,最终尝试调用highlight(),从而导致“无法读取未定义的属性“type”错误。所以我不能用你的无钥匙增强器。我将用类似的东西更新我的帖子。我基本上会将所有错误添加到UL中,但只会将有效的密钥错误添加到error对象中。欢迎使用Stack Overflow!请添加一些解释,说明此代码为何有助于OP。这将有助于提供未来观众可以从中学习的答案。有关详细信息,请参阅。@Sumgoy您好,我尝试了您的解决方案,但在第二个提交按钮上得到了错误列表。请看我的问题,这样你能更好地理解它。
    $(function () {
        var formValidator,
            $form = $("#formA");
    
        // add handler to the forms submit action
        $form.submit(function () {
            if (!formValidator) {
                formValidator = $form.validate({}); // Get existing jquery validate object
            }
    
            var errorList = [];
    
            // get existing summary errors from jQuery validate
            $.each(formValidator.errorList, function (index, errorListItem) {
                errorList.push(errorListItem.message);
            });
    
            // add our own errors
            if (testForErrorCondidtionA()) {
                errorList.push("Please fix error condition A!");
            }
    
            if (testForErrorCondidtionB()) {
                errorList.push("Please fix error condition B!");
            }
    
            // No errors, do nothing
            if (0 === errorList.length) {
                return true; // allow submit
            }
    
            // find summary div
            var $summary = $form.find("[data-valmsg-summary=true]");
    
            // find the unordered list
            var $ul = $summary.find("ul");
    
            // Clear existing errors from DOM by removing all element from the list
            $ul.empty();
    
            // Add all errors to the list
            $.each(errorList, function (index, message) {
                $("<li />").html(message).appendTo($ul);
            });
    
            // Add the appropriate class to the summary div
            $summary.removeClass("validation-summary-valid")
                .addClass("validation-summary-errors");
    
            return false; // Block the submit
        });
    });
    
        if (!formValidator) {
            formValidator = $form.validate({}); // Get existing jquery validate object
        }
    
        // get existing summary errors from jQuery validate
        $.each(formValidator.errorList, function (index, errorListItem) {
            errorList.push(errorListItem.message);
        });
    
        // add our own errors
        if (testForErrorCondidtionA()) {
            errorList.push("Please fix error condition A!");
        }
    
        //unobtrusiveValidation should do the ul/summary dirty work.
        $form.trigger('invalid-form.validate', formValidator);
    
    function resetValidation() {
        var form = $('#formName');
        var summary = form.find('[data-valmsg-summary=true]');
        var ul = summary.find('ul');
        ul.empty();
        summary.removeClass('validation-summary-errors').addClass('validation-summary-valid');
    }
    
    var Frm =  "#SomeFrm"
    , $validator = $(Frm).validate();
    
    
    if (SomeNeedValid())
    {
        $validator.errorList.push({"message":"fix error"});
        $(Frm).trigger('invalid-form.validate', validator);
    }