对话框中的局部视图

时间:2013-09-18 17:11:22

标签: asp.net-mvc jquery-ui

我已经设法将JQuery模式对话框显示在其中,我加载了部分视图:

var url = '@Url.Action("ShowCarDetail", "Car")?id=' + id;
            $('#dialog-modal').dialog(
                { 
                    title: "Car Detail", 
                    width: 600, 
                    height: 500,
                    draggable: false,
                    close: function (event, ui) {
                        $(this).dialog('close');
                    }

                });

            $('#dialog-modal').load(url, function() 
            {
                $(this).dialog('open'); 
            });

这样可行。问题是当关闭对话框并重新打开它时,数据不会刷新。我在该局部视图上有一个DateTime告诉我这个,所以离开它几秒钟仍然显示我的旧值。

如何强制模式对话框正确加载(没有使用可能是从上一个请求中呈现的旧html)?

另外 - 如果局部视图有某些操作,例如提交或其他某些操作,对话框是否仍会保持打开状态还是会完全刷新页面?我希望能够拥有类似于iframe样式的模态对话框,其中模式中页面内发生的任何操作仍然存在,并且在页面没有完全刷新和关闭对话框的情况下进行更新。

感谢

1 个答案:

答案 0 :(得分:3)

关于你的问题:

  

也 - 如果局部视图有一些像提交或   对话框仍会保持打开状态,或者刷新对话框   页面完全?我希望能够将该模态对话框设置为类似于   iframe样式在页面中发生的任何动作   模态仍将存在并在没有页面的情况下进行更新   完全刷新并关闭对话框。

页面将使用普通表单完全刷新。要实现您描述的内容,请使用ajax表单,该表单对控制器方法执行操作并返回部分视图。然后对ajax表单进行成功回调,该表单将使用响应内容(这将是从帖子返回的部分视图)替换div(在打开的对话框内)的内容。

简化示例......

查看:

<div id="dialog-modal">
    <p>Some optional static content here (within the dialog) 
    that should not change when the form is submitted.</p>
    <div id="dialog-content">
        @using (Html.BeginForm("MyAction", "MyController", null, FormMethod.Post, new { @id="MyForm" }))
        {
            @Html.EditorFor(x => x.Foo)
            <input type="submit" value="OK" />
        }
    </div>
</div>

控制器:

[HttpPost]
public ActionResult MyAction(MyModel model)
{
    // Do some stuff here with the model if you want
    MyNewModel newModel = new MyNewModel();
    return PartialView("_MyPartialView", newModel);
}

JavaScript的:

$(function () {
    $('#MyForm').submit(function () {
        $.ajax({
            url: this.action,
            type: this.method,
            data: $(this).serialize(),
            success: function (xhr) {
                $('#dialog-content').html(xhr);
            }
        });
        return false;
    });
});

请注意,此实现将替换表单,因此您可以将表单放在div之外,如果需要可以替换,或者如果您希望在对话框中提交不同的表单,则可以在部分视图中使用不同的表单。根据您的需求灵活调整。在明确调用close之前,它也不会关闭对话框,也不会影响替换div内容之外的任何内容。希望这有帮助!

相关问题