我正在尝试创建简单的 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 事件,它不会触发。