为什么我的ajax帖子没有替换内容?

时间:2012-03-03 09:22:43

标签: c# asp.net-mvc

我有这个:

 <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()之前完成所有操作...

1 个答案:

答案 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);