【发布时间】:2016-08-05 10:28:50
【问题描述】:
我在_Layout 文件代码中通过如下所示的剃刀操作调用调用了部分视图。
@Html.Action("CartSummary", "ShoppingCart")
我的控制器中的CartSummary 操作如下所示:
[ChildActionOnly]
public ActionResult CartSummary()
{
var cart = ShoppingCart.GetCart(this.HttpContext);
var viewModel = new ShoppingCartViewModel
{
CartItems = cart.GetCartItems(),
CartTotal = cart.GetTotal()
};
return PartialView("CartSummary", viewModel);
}
我想每秒刷新一次局部视图,以反映对用户购物车所做的更改。目前,当我添加一个项目时,整个页面都会刷新,我可以在我的购物车中看到添加的项目,但是当我从购物车中删除项目时,因为它是由 Ajax 调用完成的,所以没有显示更改。我怎样才能做到这一点?
为斯蒂芬编辑:
我有一个名为CartIndex 的视图(主视图),在此视图中我显示用户将项目添加到他/她的购物车。用户可以根据需要删除商品,从购物车中删除商品是通过 CartIndex 视图中的 ajax 调用完成的。当用户删除项目时,此 CartIndex 视图显示项目已成功删除,直到这里一切都很好。我有一个名为CartSummary 的部分视图,它显示购物车的摘要,例如用户购物车中有多少商品等...我遇到的问题是,当用户从CartIndex 视图中删除商品时,同样应该发生CartSummary 以便他们可以显示相同数量的项目和总数,但在我的情况下,我的主视图 CartIndex 视图显示正确的数据但部分视图未更新?下面是从购物车中删除商品的 ajax 调用。
<script type="text/javascript">
$(function () {
// Document.ready -> link up remove event handler
$(".del-goods").click(function () {
// Get the id from the link
var recordToDelete = $(this).attr("data-id");
if (recordToDelete != '') {
// Perform the ajax post
$.post("/ShoppingCart/RemoveFromCart", { "id": recordToDelete },
function (data) {
// Successful requests get here
// Update the page elements
if (data.ItemCount == 0) {
$('#row-' + data.DeleteId).fadeOut('slow');
} else {
$('#item-count-' + data.DeleteId).text(data.ItemCount);
}
$('#cart-total').text(data.CartTotal);
$('#update-message').text(data.Message);
$('#cart-status').text('Cart (' + data.CartCount + ')');
});
}
});
});
</script>
【问题讨论】:
-
为什么不在 ajax 成功回调中从 DOM 中删除项目(以及为什么在添加新项目时刷新整个页面?)
-
您如何将商品添加到购物车?通过表单提交或 ajax 调用?
-
@JSantosh 通过表单提交而不是 ajax 调用。出于什么原因,我不需要 ajax 调用来通过它添加项目。
-
@StephenMuecke 因为我想将用户重定向到一个全新的 url,我不需要刷新整个页面吗?
-
@StephenMuecke 如何在 Ajax 回调中从 DOM 中删除项目,并注意 ajax 回调位于视图而不是我的局部视图中
标签: ajax asp.net-mvc razor