Я пытаюсь создать простое приложение CRUD. У меня есть частичное представление, которое заполняет строки. В каждой строке есть ссылка «Изменить», по щелчку которой я открываю диалоговое окно jquery. В этом диалоговом окне я загружаю другой частичный вид для редактирования соответствующей строки. На кнопке ok я публикую форму (которая является формой ajax).
Затем контроллер возвращает другое частичное представление, которое должно заменить исходный список (частичное представление списка), потому что я предоставляю updateTargetId (это div, в котором отображается список.
Здесь я сталкиваюсь с двумя проблемами,
- Это работает в первый раз (т.е. первый раз в сеансе), когда я публикую форму. Когда я открываю другую запись для редактирования, форма загружается правильно, но когда я ее публикую, форма всегда имеет значения записи, которые публикуются с первой попытки.
- Список не обновляется даже после успешной публикации. Я вижу ответ на сообщение в скрипаче. Список обновляется только после обновления браузера.
Я пробовал очищать modelState, но не работает. Я попытался отладить код jquery и обнаружил, что когда я это делаю, form.serialize имеет старые значения, поэтому контроллер всегда получает эти значения.
Я думаю, что где-то он кэширует форму. Затем я отключил кеширование, добавив
$.ajaxSetup({ cache: 'false' });
в документе.готово. Это тоже не работает.
Вот код 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 не обновляет цель. Я также устанавливаю событие OnSuccess в форме Ajax, которая не срабатывает.
Еще одно мое наблюдение: jQuery не обновляет цель. Я также устанавливаю событие OnSuccess в форме Ajax, которая не срабатывает.