我已经设法将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样式的模态对话框,其中模式中页面内发生的任何操作仍然存在,并且在页面没有完全刷新和关闭对话框的情况下进行更新。
感谢
答案 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内容之外的任何内容。希望这有帮助!