Imagelinkを含むグリッド(Infragistics JQueryグリッド)を含むビュー(Index.cshtml)があります。ユーザーがこのリンクをクリックすると、次のjquery関数が呼び出されます。
function ConfirmSettingEnddateRemarkToYesterday(remarkID) {
//Some code...
//Call to action.
$.post("Home/SetEnddateRemarkToYesterday", { remarkID: remarkID }, function (result) {
//alert('Succes: ' + remarkID);
//window.location.reload();
//$('#remarksgrid').html(result);
});
}
コメントアウトすると、自分自身のアラートと2回のビューの更新が表示されます。 location.reload()は機能しますが、基本的にはブラウザーにとっては手間がかかりすぎます。 .html(result)は、index.cshtml + Layout.cshtml全体をremarksgriddivにdoubleで投稿します。だからそれは正しくありません。
これは、それが呼び出すアクションです(SetEnddateRemarkToYesterday):
public ActionResult SetEnddateRemarkToYesterday(int remarkID) {
//Some logic to persist the change to DB.
return RedirectToAction("Index");
}
これは、リダイレクト先のアクションです。
[HttpGet]
public ActionResult Index() {
//Some code to retrieve updated remarks.
//Remarks is pseudo for List<Of Remark>
return View(Remarks);
}
成功した後にwindow.location.reloadを実行しないと、AJAX postビューはリロードされません。MVCは初めてですが、これを行うためのより良い方法があると確信しています。 。ここで基本的なことを理解していません。おそらく正しい方向にナッジしますか?よろしくお願いします。
AJAX呼び出しを要求するときは、その応答を使用してリダイレクトする必要があります
ランディングURLでJSONResultを返すようにコントローラーを変更します。
public ActionResult SetEnddateRemarkToYesterday(int remarkID) {
//Some logic to persist the change to DB.
var redirectUrl = new UrlHelper(Request.RequestContext).Action("Index", "Controller");
return Json(new { Url = redirectUrl });
}
JSコール:
$.post("Home/SetEnddateRemarkToYesterday", { remarkID: remarkID }, function (result) {
window.location.href = result.Url
});
Ajaxの投稿後、特定のURLを呼び出す必要があります。このように..window.location.href = Url
jQuery.postを使用する場合、新しいページは。doneメソッドを介して返されます
jQuery
jQuery.post("Controller/Action", { d1: "test", d2: "test" })
.done(function (data) {
jQuery('#reload').html(data);
});
HTML
<body id="reload">