我有这个:
<div id="miniShoppingCartContainer">
@Html.Action("MiniShoppingCart", "ShoppingCart")
</div>
其中MiniShoppingCart操作返回包含所有内容的MiniShoppingCart.cshtml局部视图。
在这个局部视图中,我添加了一个增加产品购物车数量的ajax调用:
@using (Ajax.BeginForm("IncreaseProductQuantity", "ShoppingCart", new { shoppingCartItemId = item.Id }, new AjaxOptions { UpdateTargetId = "miniShoppingCartContainer", InsertionMode = InsertionMode.Replace }))
{
<li>
<input type="submit" class="btn-up" />
</li>
}
调用方法:
public ActionResult IncreaseProductQuantity(int shoppingCartItemId)
{
//get shopping cart item
var cart = _workContext.CurrentCustomer.ShoppingCartItems
.Where(x => x.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList();
var sci = cart.Where(x => x.Id == shoppingCartItemId).FirstOrDefault();
if (sci == null)
{
return RedirectToRoute("ShoppingCart");
}
//update the cart item
_shoppingCartService.UpdateShoppingCartItem(_workContext.CurrentCustomer,
sci.Id, sci.Quantity + 1, true);
return MiniShoppingCart();
}
请注意,在方法结束时,我调用MiniShoppingCart ActionResult,它准备购物车并返回PartialView(正如您在帖子开头看到的那样)。
嗯,产品的更新发生得很好,但内容没有刷新(或更换)......
你能指出我错在哪里吗?
更新:
使用Chrome Dev进行检查。工具我在发帖时看到错误:
POST http://localhost/ShoppingCart/IncreaseProductQuantity?shoppingCartItemId=11 500 (Internal Server Error)
f.support.ajax.f.ajaxTransport.sendjquery-1.7.1.min.js:4
f.extend.ajaxjquery-1.7.1.min.js:4
ejquery.unobtrusive-ajax.min.js:5
(anonymous function)jquery.unobtrusive-ajax.min.js:5
f.event.dispatchjquery-1.7.1.min.js:3
f.event.add.h.handle.ijquery-1.7.1.min.js:3
2
猜测这个日志有什么问题很奇怪......基本上,如果我进行调试,我可以看到它在return PartialView(model);
方法的MiniShoppingCart()
之前完成所有操作...
答案 0 :(得分:0)
发现问题:
>The partial view 'IncreaseProductQuantity' was not found or no view engine supports the searched locations.
基本上,从return MiniShoppingCart();
方法执行IncreaseProductQuantity
不会自动返回MiniShoppingCart局部视图,但仍会尝试返回IncreaseProductQuantity
部分视图,当然这不存在。
因此,我这样做了:
var model = PrepareMiniShoppingCartModel();
return PartialView("MiniShoppingCart", model);