无法获取我的ajax“添加到购物车局部”功能以在ASP.NET MVC中工作

时间:2019-02-24 22:29:09

标签: asp.net ajax asp.net-mvc asp.net-ajax

我希望调用ajax函数以将其添加到我制作的购物车中,但是它似乎无法正常工作。我认为产品ID由于某种原因未与其链接。这是代码:

 <div class="addtocart">
            <a href="#" class="addtocart">Add to cart</a>

            <span class="ajaxmsg">The product has been added to your cart. </span>
  </div>
<script>
$(function () {


/*
* Add to cart
*/

$("a.addtocart").click(function (e) {
    e.preventDefault();

    $("span.loader").addClass("ib");

    var url = "/cart/AddToCartPartial";

    $.get(url, { id: @Model.Id }, function (data) {
        $(".ajaxcart").html(data);
    }).done(function () {
        $("span.loader").removeClass("ib");
        $("span.ajaxmsg").addClass("ib");
        setTimeout(function () {
            $("span.ajaxmsg").fadeOut("fast");
            $("span.ajaxmsg").removeClass("ib");
        }, 1000);
    });
});


  </script>

我找到了一个解决方案,但是当我使用此链接时,它可以工作,但是需要我不想使用的addtocartpartial。

@Html.ActionLink("Test", "AddtoCartPartial", "Cart", new { id = Model.Id }, new { @class = "addtocart" })

是否还有另一种方法来调用ajax脚本或避免链接到select的addtocartpartial页面上?

我的addtocartpartial控制器是:

   public ActionResult AddToCartPartial(int id)
    {
        // Init CartVM list
        List<CartVM> cart = Session["cart"] as List<CartVM> ?? new List<CartVM>();

        // Init CartVM
        CartVM model = new CartVM();

        using (Db db = new Db())
        {
            // Get the product
            ProductDTO product = db.Products.Find(id);

            // Check if the product is already in cart
            var productInCart = cart.FirstOrDefault(x => x.ProductId == id);

            // If not, add new
            if (productInCart == null)
            {
                cart.Add(new CartVM()
                {
                    ProductId = product.Id,
                    ProductName = product.Name,
                    Quantity = 1,
                    Price = product.Price,
                    Image = product.ImageName
                });
            }
            else
            {
                // If it is, increment
                productInCart.Quantity++;
            }
        }

        // Get total qty and price and add to model

        int qty = 0;
        decimal price = 0m;

        foreach (var item in cart)
        {
            qty += item.Quantity;
            price += item.Quantity * item.Price;
        }

        model.Quantity = qty;
        model.Price = price;

        // Save cart back to session
        Session["cart"] = cart;

        // Return partial view with model
        return PartialView(model);
    }

1 个答案:

答案 0 :(得分:1)

您可能为id参数设置了默认路由。在这种情况下,您可以将值以controller/action/{id}格式附加到url,然后从$.get中删除参数。以下代码可能适合您:

var url = "/cart/AddToCartPartial/" + "@Model.Id";

$.get(url, function (data) {
    $(".ajaxcart").html(data);
}).done(function () {
    // ... other code
});

或者您可以尝试使用查询参数样式附加id

var url = "/cart/AddToCartPartial?id=" + "@Model.Id";