【发布时间】:2013-01-10 20:46:41
【问题描述】:
我正在尝试创建简单的 CRUD 应用程序。我有一个填充行的部分视图。在每一行中都有一个编辑链接,我正在打开一个 jquery 对话框。在这个对话框中,我加载了另一个局部视图来编辑相应的行。在确定按钮上,我发布表单(这是一个 ajax 表单)。
控制器然后返回另一个部分视图,该视图被假定为替换原始列表(列表部分视图),因为我提供了 updateTargetId(这是呈现列表的 div。
这里我面临两个问题,
- 这是第一次(即第一次在会话中)我发布表单。当我打开另一条记录进行编辑时,表单已正确加载,但当我发布它时,表单始终具有第一次尝试发布的记录的值。
- 即使发布成功后,列表也不会更新。我可以在提琴手中看到帖子响应。只有在我刷新浏览器后才会刷新列表。
我已尝试清除 modelState 但不起作用。我尝试调试 jquery 代码,发现当我执行 form.serialize 时有旧值,因此控制器总是获取这些值。
我认为它在某处缓存表单。然后我通过添加关闭缓存
$.ajaxSetup({ cache: 'false' });
在 document.ready 中。这也行不通。
这里是 jQuery 代码
this.bindOpenDialog = function () {
$(".openDialog").click(function (e) {
e.preventDefault();
var height = $(this).attr("data-dialog-height");
var width = $(this).attr("data-dialog-width");
var data_postUrl = $(this).attr("data-postUrl");
var data_returnUrl = $(this).attr("data-returnUrl");
var data_updateTarget = $(this).attr("data-updateTarget");
var data_form_id = $(this).attr("data-form-id");
var callBack = $(this).attr("callBack");
if (data_postUrl == '') {
data_postUrl = this.href;
}
var div = $("<div></div>");
div.addClass("ui-dialog")
div.attr("id", $(this).attr("data-dialog-id"))
var dialog = div.dialog({
title: $(this).attr("data-dialog-title"),
close: function () { $(this).remove() },
height: height,
width: width,
modal: true,
buttons: {
'Save': function () {
var dialog = $(this);
var form = null;
if (data_form_id == '' || data_form_id == undefined) {
form = dialog.find('form').first();
}
else {
form = $("#" + data_form_id).first();
}
var req = $.post(data_postUrl, form.serialize(),
function (responseText, textStatus) {
}, "html");
req.success(function (data) {
if (callBack == '' || callBack == undefined) {
dialog.dialog('destroy');
}
else {
var cb = eval(callBack + "()");
dialog.dialog('destroy');
}
});
req.success(function (data) {
if (callBack == '' || callBack == undefined) {
thisDialog.dialog('destroy');
}
else {
var cb = eval(callBack + "()");
thisDialog.dialog('destroy');
}
//remove the form from the DOM.
//If I do not do this, it always posts the
// form which was posted for the first time.
$("#" + data_form_id).remove();
});
req.error(function (e) {
alert('error ' + e.toString())
});
},
'Cancel': function () {
var dialog = $(this);
dialog.dialog('destroy');
}
}
});
dialog.load(this.href);
}
);
有没有人遇到过这个问题?
我的另一个观察是 jQuery 没有更新目标。我还在 Ajax 表单上设置了 OnSuccess 事件,它不会触发。
我的另一个观察是 jQuery 没有更新目标。我还在 Ajax 表单上设置了 OnSuccess 事件,它不会触发。
【问题讨论】:
-
你可以尝试通过按回车键地址栏而不是按F5键重新加载页面,告诉结果?
-
这也行不通:(
-
@BillTheLizard 我应该把它放在一个通知中,我已经在问题本身中添加了两个非答案(补充观察和仍然引发问题的代码更改),抱歉。 =)
标签: asp.net-mvc-4 jquery-dialog asp.net-mvc-partialview jquery-post