在我单击删除按钮后,调用方法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");
}
}
答案 0 :(得分:0)
使用Ajax调用进行RedirectToAction
不会将用户重定向到任何地方,因为您没有使用整页发布/刷新的默认生命周期,您只是通过ajax进行了边呼,有效地独立于网页的其余部分。
我想说您可以采用3种标准选项:
您可以改为返回一个带有匿名对象的json,并且在ajax调用成功后,通过更改window.href
属性来强制通过javascript刷新页面。
您可以在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.
}
})
您不能使用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,并且有一个项目列表,那么您可能想看一下我以前关于使用列表进行模型绑定的答案之一。
我建议您研究每种方法,并根据要实现的网站的感觉来决定要实施哪种方法。
希望能帮助您指出正确的方向。