用户发布表单后,我的控制器中有以下代码,但是如果验证失败(_applicationValidator.Validate),我通常会重新加载“编辑”视图,但在这种情况下,我想保持对话框打开并在其中简单显示这些错误对话框。

控制器代码:

  [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Update(ApplicationUpdater applicationUpdater_)
    {
        if (_applicationValidator.Validate(applicationUpdater_, ModelState, ValueProvider))
        {
            _repo.UpdateApplication(applicationUpdater_);
            ApplicationsViewModel vm = new ApplicationsViewModel();
            vm.Applications = _repo.GetApplications();
            return View("Index", vm);
        }
        else
        {
            ApplicationViewModel vm = GetApplicationVM();
            return View("Edit", vm);
        }
    }


查看代码(jQuery

 $(".showEditPopup").click(function() {
            $.post("Applications/ShowEdit",
                { recnum: $(this).parents('tr:first').attr("recnum") },
                function(htmlResult) {
                    $("#EditUserControlDiv").remove();
                    $("#container").append(htmlResult);
                    $("#container select[multiple]").asmSelect();
                    $("#EditUserControlDiv").dialog(
                    {
                        height: 675,
                        width: 650,
                        modal: true
                    }
                    );
                }
           );
        });

最佳答案

如前所述


但是在这种情况下,我想保持拨号盘打开,并在对话框中简单显示这些错误


好。

打开对话框后,您必须


隐藏上一条错误消息


...

open: function(event, ui) {
    $(".error").css("display", "none");
}


单击对话框按钮后,您必须


禁用JQuery UI
显示“正在加载...”图片
发送表格


...

$("#loading").css("display", "block");

panel.dialog("disable");

panel.dialog("option", "disabled", true);


加载响应后(可以使用JSON作为响应),您必须


检查是否有错误。


...

// var response plays the role of JSON response

var response = {
    "errors":[
        {
            "property-name":"name",
            "error":"Name is required"
        },
        {
            "property-name":"age",
            "error":""
        }
    ]
};

var hasErrors = false;

for(var i = 0; i < response.errors.length; i++) {
    if(response.errors[i].error != "") {
         hasErrors = true;

         $("#" + response.errors[i]["property-name"] + "-error")
           .text(response.errors[i]["error"])
           .css("display", "block");
    }
}

if(!hasErrors) {
    panel.dialog("close");

    alert("success form!");
} else {
    panel.dialog("enable");

    panel.dialog("option", "disabled", false);
}


Here您可以在操作中看到

注意,您具有默认行为。所以你可以把它放在一个外部函数中

10-05 20:29