mvc3与jquery对话框关闭

时间:2013-01-29 21:02:34

标签: asp.net-mvc jquery-ui

我正在使用一个对话框:

    <div id="dialog" title="Edit Information" style="overflow: hidden;">
    </div>


    $('#dialog').load("@Url.Action("EditInfo")",
                    function(response, status, xhr) {
                        $('#dialog').dialog('open');
    });

一旦用户用户点击对话框中的提交,我就这样开始了httppost

     [HttpPost]
     public ActionResult EditInfo(MicroInfo model)
     {
        if (ModelState.IsValid)
        {
            lbService.EditMicroInfoData(model);
            return View(model); // success 
        }

        return View(model); // problem           

     }

当它进入

    return View(model) // success

,它不会在对话框中打开,而是在正常页面中打开。我想在对话框中打开它,以便用户可以关闭对话框。

我想知道我是否应该在

中这样做
      $.ajax( .... 

致电

1 个答案:

答案 0 :(得分:3)

您可以在要加载的部分内使用Ajax.BeginForm。因此,将要加载的内容放在部分对话框中,并使HttpPost控制器操作返回相同的局部视图,而不是返回整个视图。

如果您希望jquery.unobtrusive-ajax.js表单有效,请不要忘记在您的网页中加入Ajax.BeginForm脚本。

作为使用Ajax.BeginForm的替代方法,您仍然可以使用普通的Html.BeginForm并手动AJAX化它:

$(document).on('submit', '#dialog form', function() {
    $.ajax({
        url: this.action,
        type: this.method,
        data: $(this).serialize(),
        success: function(result) {
            // Here you could test the result of the controller action
            // and in case it is success close the modal
            // I would recommend you returning a Json result in this case
            // so that here you could test for it:
            if (result.success) {
                $('#dialog').dialog('close');
            } else {
                // a partial view was returned, probably an error =>
                 // refresh the dialog
                $('#dialog').html(result);
            }
        }  
    });
    return false;
});