シンプルな CRUD アプリケーションを作成しようとしています。行を移入する部分ビューがあります。各行には、クリックすると編集リンクがあり、jqueryダイアログを開いています。このダイアログでは、対応する行を編集するために別の部分ビューを読み込みます。[OK] ボタンでフォーム (Ajax フォーム) を投稿します。
updateTargetId (これは、リストがレンダリングされる div です) を提供しているため、コントローラーは元のリスト (リストの部分ビュー) を置き換えると思われる別の部分ビューを返します。
ここで私は2つの問題に直面しています、
- これは初めて機能します (つまり、セッションで初めて) フォームを投稿します。編集のために別のレコードを開くと、フォームは正しく読み込まれますが、投稿すると、最初の試行で投稿されたレコードの値がフォームに常に含まれます。
- 投稿が成功した後でも、リストは更新されません。フィドラーで投稿の応答を見ることができます。リストは、ブラウザを更新した後にのみ更新されます。
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);
}
);
すでにこの問題に直面している団体はありますか?
私のもう 1 つの観察結果は、jQuery がターゲットを更新していないことです。また、起動しない Ajax フォームに OnSuccess イベントを設定しました。
私のもう 1 つの観察結果は、jQuery がターゲットを更新していないことです。また、起動しない Ajax フォームに OnSuccess イベントを設定しました。