我正在使用一个对话框:
<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( ....
致电
答案 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;
});