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

时间:2011-09-15 13:32:26

标签: asp.net-mvc-3 jquery modal-dialog

在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代码的局部视图,当模型没有错误时关闭模态窗口,但是在我看来这个解决方案不是很整洁。还有其他想法吗?

1 个答案:

答案 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>