关闭包含ASP MVC Ajax表单的模式窗口

在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对象来validation它,如果出现错误,我将返回包含模型错误的相同局部视图。 除以下情况外,此方法正常:当模型不包含错误时,我想自动关闭模态窗口。 我尝试了以下方法:

 @using (Ajax.BeginForm("Save", "Home", new AjaxOptions {HttpMethod = "POST", UpdateTargetId = "modal", OnSuccess = "hideModal(); alert('Saved');"})) 

但是,当模型包含错误时,Ajax调用仍然有效,因此将调用OnSuccess。 我试图通过在局部视图中发送错误HttpStatusCode来解决这个问题,但是不会使用新的html更新div。 我认为唯一的解决方案是发送一个包含javascript代码的局部视图,当模型没有错误时关闭模态窗口,但我认为这个解决方案不是很整洁。 还有其他想法吗?

我今天必须做同样的事情。 我想出的解决方案是在动作成功时返回一个属性设置为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" })) { %> 
<% } %>