Опитвам се да създам просто CRUD приложение. Имам частичен изглед, който запълва редовете. Във всеки ред има връзка Редактиране, при щракване върху която отварям диалогов прозорец на jquery. В този диалогов прозорец зареждам друг частичен изглед за редактиране на съответния ред. На бутона ok публикувам формуляра (който е ajax формуляр).
След това контролерът връща друг частичен изглед, за който се предполага, че замества оригиналния списък (частичния изглед на списъка), защото предоставям updateTargetId (това е div, в който се изобразява списъкът.
Тук се сблъсквам с два проблема,
- Това работи за първи път (т.е. за първи път в сесията), публикувам формуляра. Когато отворя друг запис за редактиране, формулярът се зарежда правилно, но когато го публикувам, формулярът винаги има стойностите на записа, които са публикувани при първия опит.
- Списъкът не се актуализира дори след успешно публикуване. Виждам отговора на публикацията във fiddler. Списъкът се обновява само след като обновя браузъра.
Опитах да изчистя 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 формуляр, който не се задейства.