Asp.net mvc 3 JQuery对话框:如何使用服务器端错误/消息更新对话框
我正在尝试使用JQuery对话框来弹出一个窗口,比如说,一个add按钮,它将显示一个包含Html.BeginForm()表单的对话框 通过使用对话框中的按钮,或者在其中放置对话框,我希望提交表单,然后取回表单,或者显示添加成功的更新,或者显示表单存在一些问题(例如:服务器端错误) 例如: 我认为我通过使用以下方法正确地进行了客户端验证:Asp.net mvc 3 JQuery对话框:如何使用服务器端错误/消息更新对话框,asp.net-mvc-3,jquery-dialog,Asp.net Mvc 3,Jquery Dialog,我正在尝试使用JQuery对话框来弹出一个窗口,比如说,一个add按钮,它将显示一个包含Html.BeginForm()表单的对话框 通过使用对话框中的按钮,或者在其中放置对话框,我希望提交表单,然后取回表单,或者显示添加成功的更新,或者显示表单存在一些问题(例如:服务器端错误) 例如: 我认为我通过使用以下方法正确地进行了客户端验证: $.validator.unobtrusive.parse("#EventManage"); 但我的大问题实际上是服务器端验证/服务器端数据检索。我认为远程验
$.validator.unobtrusive.parse("#EventManage");
但我的大问题实际上是服务器端验证/服务器端数据检索。我认为远程验证对我不起作用,因为这种错误或多或少是基于表单的错误,而不是特定的文本框
我怎样才能让它工作?我真的毫无头绪,我已经在理论上到处尝试过让它发挥作用
目前,当对话框表单提交时,我有如下内容:
"Save": function () {
$.validator.unobtrusive.parse("#EventManage");
if ($("#EventManage").valid()) {
$.ajax({
url: "/Home/EventSave",
type: 'POST',
data: $("#EventManage").serialize(),
success: function (result) {
$("#EventManage").html(result);
},
error: function (result) {
$("#EventManage").html(result);
}
});
}
},
我没有得到我想要的,但是,对话框似乎没有更新到和更新部分视图,没有错误
实际上,我是在遵循这个例子,关于如何让它工作:
请给出一些关于如何完成这件事的提示:)
编辑:
我的EventManage部分表单:-
@model Harrods.Web.Models.EventManageModel
<div>
@using (Html.BeginForm("EventSave", "Home", FormMethod.Post, new { id = "EventManage", @class = "Dialog" }))
{
@Html.ValidationSummary(false, "Please correct the errors below and try again:", new { @class = "ui-state-error ui-corner-all" })<br />
<br />
@Html.AntiForgeryToken()
<fieldset>
<legend>Event Details</legend>
<br />
@Html.Hidden("Id")
<div class="editor-label-dialog">
@Html.LabelFor(m => m.Event_Name)
</div>
<div class="editor-field-dialog">
@Html.TextBoxFor(m => m.Event_Name)
<br />
@Html.ValidationMessageFor(m => m.Event_Name)
</div>
<p class="clear"></p>
<br />
<div class="editor-label-dialog">
@Html.LabelFor(m => m.Event_Date)
</div>
<div class="editor-field-dialog">
@Html.TextBoxFor(m => m.Event_Date)
<br />
@Html.ValidationMessageFor(m => m.Event_Date)
</div>
<p class="clear"></p>
<br />
<input type="submit" class="addNew" value="Save" />
<div class='loading' style='display: none'><img src="@Url.Content("~/Assets/img/loading.gif")" title="Loading" /></div>
</fieldset>
}
</div>
@model Harrods.Web.Models.EventManageModel
@使用(Html.BeginForm(“EventSave”、“Home”、FormMethod.Post、new{id=“EventManage”、@class=“Dialog”}))
{
@Html.ValidationSummary(false,“请更正下面的错误并重试:”,new{@class=“ui state error ui corner all”})
@Html.AntiForgeryToken()
活动详情
@Html.Hidden(“Id”)
@LabelFor(m=>m.Event_Name)
@Html.TextBoxFor(m=>m.Event_Name)
@Html.ValidationMessageFor(m=>m.Event_Name)
@LabelFor(m=>m.Event\u Date)
@Html.TextBoxFor(m=>m.Event\u Date)
@Html.ValidationMessageFor(m=>m.Event_Date)
}
EDIT2
似乎我是为了>>成功:函数(结果)而得到它的
但它没有进入错误:函数(结果)
即使已经有错误。为了显示非特定于某些给定输入且已添加到modelstate的错误消息,您可以使用
验证摘要
帮助程序。因此,请将以下内容放在部分中的某个位置:
@Html.ValidationSummary(true)
为了显示非特定于某些给定输入且已添加到modelstate的错误消息,可以使用
ValidationSummary
helper。因此,请将以下内容放在部分中的某个位置:
@Html.ValidationSummary(true)
如果modelstate有错误,则不调用.ajax错误:如果ajax请求失败,则调用它 你要做的是检查结果,如果有错误就检查。这可以通过多种方式完成,比如Json 如果EventSave成功,则返回Json对象;如果EventSave失败,则返回partialView。然后,您可以检查它是否成功并处理这些案例 这里有一个例子 JS代码:
"Save": function () {
$.validator.unobtrusive.parse("#CreateGroup")
if ($("#CreateGroup").valid()) {
$.ajax({
url: "/Participant/CreateGroup",
type: "POST",
data: $("#CreateGroup").serialize(),
success: function (result) {
if (result.result == "success") {
$("#GroupAddDialog").dialog("close");
LoadList();
}
else {
$("#GroupAddDialog").html(result);
}
}
});
}
和控制器代码:
if(Success)
{
return Json(new
{
result = "success"
});
}
ModelState.AddModelError("", "Unable to save in db");
return PartialView("_CreateGroup", model);
如果modelstate有错误,则不调用.ajax错误:如果ajax请求失败,则调用它 你要做的是检查结果,如果有错误就检查。这可以通过多种方式完成,比如Json 如果EventSave成功,则返回Json对象;如果EventSave失败,则返回partialView。然后,您可以检查它是否成功并处理这些案例 这里有一个例子 JS代码:
"Save": function () {
$.validator.unobtrusive.parse("#CreateGroup")
if ($("#CreateGroup").valid()) {
$.ajax({
url: "/Participant/CreateGroup",
type: "POST",
data: $("#CreateGroup").serialize(),
success: function (result) {
if (result.result == "success") {
$("#GroupAddDialog").dialog("close");
LoadList();
}
else {
$("#GroupAddDialog").html(result);
}
}
});
}
和控制器代码:
if(Success)
{
return Json(new
{
result = "success"
});
}
ModelState.AddModelError("", "Unable to save in db");
return PartialView("_CreateGroup", model);
@RicL,它是否在
EventManage
partial中?另外,您是否确保从服务器向modelstate添加了一个错误?然后,您是否确保在客户机上调用了success AJAX回调,并且更新了DOM的正确部分?1)它位于。2) 是的,我直接添加了ModelState.AddModelError。3) 4)没有真正理解(请原谅我的幼稚)@RicL,既然你已经发布了你的代码,我看到你使用了Html.ValidationSummary(false,
。使用@Html.ValidationSummary(true)
有什么区别吗?将其设置为true将不会显示错误消息。奇怪的是,无论如何,我似乎使其工作,从而使其进入成功,但不会出现错误。是否有任何原因说明即使存在ModelState错误,它也会进入成功状态?@RicL,只有在控制器操作失败时才会调用错误回调。例如,如果它抛出一个e异常。您没有引发任何异常。您只是返回了一个HTTP状态代码为200的部分视图。因此调用了成功回调。@RicL,它是否在EventManage
partial中?您是否确保服务器向modelstate添加了一个错误?然后您是否确保成功的AJAX回调已在客户端上调用,并且DOM的正确部分已更新?1)它位于。2) 是的,我直接添加了ModelState.AddModelError。3) 4)没有真正理解(请原谅我的幼稚)@RicL,既然你已经发布了你的代码,我看到你使用了Html.ValidationSummary(false,
。使用@Html.ValidationSummary(true)
有什么区别吗?将其设置为true将不会显示错误消息。奇怪的是,无论如何,我似乎使其工作,从而使其进入成功,但不会出现错误。是否有任何原因说明即使存在ModelState错误,它也会进入成功状态?@RicL,只有在控制器操作失败时才会调用错误回调。例如,如果它抛出一个e您没有抛出任何异常。您只是返回一个HTTP状态代码为200的部分视图。因此,成功回调被称为.Open