在onClick页面之后重定向到页面但显示已删除的数据吗?

时间:2019-05-21 16:50:29

标签: c# ajax asp.net-mvc

在我单击删除按钮后,调用方法DeleteFavorite,但是当它重定向到Action时,它仍在收藏夹页面上显示已删除的值。

如何刷新收藏夹页面以显示正确的数据?

删除

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 :(得分:0)

使用Ajax调用进行RedirectToAction不会将用户重定向到任何地方,因为您没有使用整页发布/刷新的默认生命周期,您只是通过ajax进行了边呼,有效地独立于网页的其余部分。

我想说您可以采用3种标准选项:

  1. 您可以改为返回一个带有匿名对象的json,并且在ajax调用成功后,通过更改window.href属性来强制通过javascript刷新页面。

  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,而是使用常规表单发布,该表单发布会将页面通过常规博文发送回服务器,并且您当前的控制器代码将按原样工作。

如果您使用的是.net Framework,则可以使用Html帮助程序进行表单;如果使用的是.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,并且有一个项目列表,那么您可能想看一下我以前关于使用列表进行模型绑定的答案之一。

我建议您研究每种方法,并根据要实现的网站的感觉来决定要实施哪种方法。

希望能帮助您指出正确的方向。