0

我正在使用这样的对话框:

    <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( .... 

称呼

4

1 回答 1

3

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

jquery.unobtrusive-ajax.js如果您希望Ajax.BeginForm表单正常工作,请不要忘记将脚本包含到您的页面中。

作为使用 Ajax.BeginForm 的替代方法,您仍然可以使用普通的 Html.BeginForm 并手动对其进行 AJAXify:

$(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;
});
于 2013-01-29T21:17:45.257 回答