После onClick перенаправление страницы на страницу, но с отображением удаленных данных? - PullRequest
0 голосов
/ 21 мая 2019

После того, как я нажимаю на кнопку, чтобы удалить, он вызывает метод DeleteFavorite, но когда он перенаправляет действие, он все равно показывает удаленное значение на странице Избранное.

Как обновить страницу Избранное, чтобы отобразить правильные данные?

Удалить

function DeleteID(favID) {
    $.ajax({
        type:"POST",
        url: "@Url.Action("DeleteFavorite", "Home")",
        data: { favID: favID },
        dataType: "json"


    })
}

 [HttpPost]
        public ActionResult DeleteFavorite(int favID)
        {
            if(favID > 0){
            db.Database.ExecuteSqlCommand("DELETE FROM Favorites WHERE id={0} ", favID);

             TempData["RecordUpdated"] = "Record Deleted.";

            return RedirectToAction("Favorites");
            }

        }

1 Ответ

0 голосов
/ 21 мая 2019

Выполнение RedirectToAction с вызовом Ajax не приведет к перенаправлению пользователя куда-либо, потому что вы не задействуете жизненный цикл по умолчанию для полного пост-обновления / обновления страницы, вы делаете только побочный вызов через ajax, что эффективно действует независимо от остальной части веб-страницы.

Я бы сказал, что есть 3 стандартных варианта:

  1. Вместо этого вы можете вернуть json с анонимным объектом, и в случае успешного вызова ajax принудительно обновите страницу с помощью javascript, изменив свойство window.href.

  2. В случае успешного вызова ajax вы можете использовать javascript, чтобы удалить HTML-код, представляющий объект, который вы только что удалили.

    $.ajax({
    
        type:"POST",
        url: "@Url.Action("DeleteFavorite", "Home")",
        data: { favID: favID },
        dataType: "json",
        success: function (){
        //window.href.replace("@Url.Action()") //I'm not sure on the syntax here off hand it's been a while since I've done this
    
        //or 
    
       //use jquery/javascript to remove the html as in step 2.
    }
    

    })

  3. Вы не можете использовать ajax и использовать обычную форму сообщения, которая отправляет страницу обратно на сервер в обычном сообщении, и ваш текущий код контроллера будет работать как есть.

Это можно сделать с помощью помощника по HTML для форм, если вы используете .net Framework, и помощника по тегам форм, если вы используете .net Core.

@using (Html.BeingForm("ActionName", "ControllerName", FormMethod.POST)
{

<button name="Action" value="@item.PrimaryKey" type="submit" >Delete</button>
}
or
<form asp-action="ActionName" asp-controller="ControllerName" >

    <button name="Action" value="@item.PrimaryKey" type="submit" >Delete</button>
</form>

Если вы едете по маршруту № 3 и у вас есть список предметов, то вы можете посмотреть один из моих предыдущих ответов о привязке модели со списками.

Я бы посоветовал вам изучить каждый подход и решить, какой из них вы хотите реализовать, исходя из ощущения вашего веб-сайта, которого вы хотите достичь.

Надеюсь, это поможет вам в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...