用户发布表单后,我的控制器中有以下代码,但是如果验证失败(_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您可以在操作中看到
注意,您具有默认行为。所以你可以把它放在一个外部函数中