在webapp中我在模态窗口中使用ASP MVC Ajax表单。我没有使用任何特定的jQuery代码,只有一些打开模态窗口(即showModal()函数):
@Ajax.ActionLink("Open", "Add", "Home", new {id = Model.Id}, new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "modal", OnSuccess = "showModal()"})
此代码将我的表单(局部视图)加载到div中,并将其作为模态窗口打开。在提交ActionResult的表单中,我只使用默认的ModelState对象来验证它,如果出现错误,我将返回包含模型错误的相同局部视图。除以下情况外,此方法正常:当模型不包含错误时,我想自动关闭模态窗口。我尝试了以下方法:
@using (Ajax.BeginForm("Save", "Home", new AjaxOptions {HttpMethod = "POST", UpdateTargetId = "modal", OnSuccess = "hideModal(); alert('Saved');"}))
但是,当模型包含错误时,Ajax调用仍然有效,因此将调用OnSuccess。我试图通过在局部视图中发送错误HttpStatusCode来解决这个问题,但是然后不会使用新的html更新div。 我认为唯一的解决方案是发送一个包含javascript代码的局部视图,当模型没有错误时关闭模态窗口,但是在我看来这个解决方案不是很整洁。还有其他想法吗?
答案 0 :(得分:9)
我今天必须做同样的事情。我想出的解决方案是在动作成功时返回一个属性设置为true的JsonResult。在AjaxOptions的OnSuccess回调中,我检查了属性并关闭了我的模态窗口。
控制器方法
[HttpPost]
public ActionResult Hold(JobStatusNoteViewModel model)
{
if (ModelState.IsValid)
{
//do work
return Json(new {success = true});
}
return PartialView("JobStatusNote", model);
}
PartialView
<% using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "JobStatusForm", OnSuccess = "closePopUp" })) { %>
<div id="JobStatusForm">
<!-- Form -->
</div>
<% } %>
<script>
function closePopUp(data) {
if (data.success) {
//close popup
}
}
</script>