Просмотр не обновляется после публикации AJAX

У меня есть view (Index.cshtml) с сеткой (сетка JQuery для Infragistics) с imagelink. Если пользователь нажимает на эту ссылку, будет вызвана следующая функция 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 в div div. Так что это неверно.

Это действие, которое он вызывает (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 после сообщения succesfull AJAX, представление никогда не перезагрузится. Я новичок в MVC, но я уверен, что есть лучший способ сделать это. Я не понимаю здесь ничего принципиального. Возможно, толчок в правильном направлении? Заранее благодарю вас.

Ответ 1

Когда вы запрашиваете вызов AJAX, вы должны перенаправить его ответ

Измените свой контроллер, чтобы вернуть JSONResult с URL-адресом для посадки:

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

Ответ 2

После сообщения Ajax вам нужно позвонить на конкретный адрес. как это.. window.location.href= Url

Ответ 3

При использовании jQuery.post новая страница возвращается с помощью метода .done

jQuery

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

HTML

<body id="reload">