webdevqa.jp.net

AJAX投稿後にビューが更新されない

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は初めてですが、これを行うためのより良い方法があると確信しています。 。ここで基本的なことを理解していません。おそらく正しい方向にナッジしますか?よろしくお願いします。

11

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
});
18
Satpal

Ajaxの投稿後、特定のURLを呼び出す必要があります。このように..window.location.href = Url

4
Naveen Katakam

jQuery.postを使用する場合、新しいページは。doneメソッドを介して返されます

jQuery

jQuery.post("Controller/Action", { d1: "test", d2: "test" })
  .done(function (data) {
      jQuery('#reload').html(data);
  });

HTML

<body id="reload">
0
Colin