Jquery с MVC3 RemoveFromCart JSON не работает - PullRequest
1 голос
/ 30 июля 2011

На основе примера приложения MusicStoreMVC я создал очень похожее приложение. Разница в том, что я использовал C # вместо бритвы с * .aspx файлами.

То, что сказано здесь, является кодом контроллера для RemoveFromCart

       [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult RemoveFromCart(int id)
    {
        // Remove the item from the cart
        var cart = ShoppingCart.GetCart(this.HttpContext);

        // Get the name of the album to display confirmation
        string productName = EchoJobsClassesDataContext.Carts
            .Single(item => item.RecordId == id).Product.ProductName;

        // Remove from cart
        int itemCount = cart.RemoveFromCart(id);

        // Display the confirmation message
        var results = new ShoppingCartRemoveViewModel
        {
            Message = Server.HtmlEncode(productName) +
                " has been removed from your shopping cart.",
            CartTotal = cart.GetTotal(),
            CartCount = cart.GetCount(),
            ItemCount = itemCount,
            DeleteId = id
        };
        return Json(results);
    }

Результаты JSON не передаются обратно в handleUpdate () в javascript. Я публикую код ниже. Я знаю, что было много ответов на этот вопрос, но я попробовал все, чтобы это работало, но до сих пор не добился успеха.

Javascript:

    <script src="<%: Url.Content("~/Scripts/MicrosoftAjax.js") %>" type="text/javascript"></script>
    <script src="<%: Url.Content("~/Scripts/MicrosoftMvcAjax.js") %>" type="text/javascript"></script>
    <script src="<%: Url.Content("~/Scripts/jquery-1.5.1.min.js") %>" type="text/javascript"></script>
<%--    <script src="<%: Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js") %>" type="text/javascript"></script>
--%>    <script language="javascript" type="text/javascript">

            function handleUpdate(results) {
                var json = results.get_data()
                var data = Sys.Serialization.JavaScriptSerializer.deserialize(json);
                alert(data.toString());


//            // Load and deserialize the returned JSON data
//            var json = results.get_data();
//            var data = JavaScriptSerializer.deserialize(json);


            // Update the page elements
            //                    // Update the page elements
            //                    $('#row-' + data.DeleteId).fadeOut('slow');
            //                    $('#cart-status').text('Cart (' + data.CartCount + ')');
            //                    $('#update-message').text(data.Message);
            //                    $('#cart-total').text(data.CartTotal);

//            if (data.ItemCount == 0) {
//                $('#row-' + data.DeleteId).fadeOut('fast');

//            } else {
//                $('#cartItem-count-' + data.DeleteId).text(data.ItemCount);

//            }
//            $('#cartItem-total').text(data.CartTotal);

//            $('#update-message').text(data.Message);

//            $('#cartItem-status').text('Cart (' + data.CartCount + ')');

        }

Пожалуйста, обратите внимание, что я закомментировал большую часть кода, чтобы посмотреть, публикуются ли здесь результаты. И у меня не было успеха.

Вот мой файл Index.aspx:

<% foreach (var item in Model.AsEnumerable())
   { %>
<%foreach (var cartItem in item.CartItems)
  {%>
<tr>
    <td>
        <%: Html.ActionLink(cartItem.Product.ProductName, "LearnMore", "ProductDetails", new { id = cartItem.ProductId },
        null)%>
    </td>
    <td>
        <%: Html.DisplayFor(cartitem => cartItem.Product.ProductPrice) %>
    </td>
    <td id="cartItem-count-<%:cartItem.RecordId %>">
        <%: Html.DisplayFor(caritem => cartItem.Count) %>
        <%: Ajax.ActionLink("Remove Count", "RemoveFromCart", new { id = cartItem.RecordId }, new AjaxOptions { OnSuccess = "handleUpdate", HttpMethod = "Post" })%>
    </td>
    <td id="row-<%:cartItem.RecordId %>">
        <%: Ajax.ActionLink("Remove From Cart", "RemoveFromCart/" + cartItem.RecordId, new AjaxOptions { OnSuccess = "handleUpdate", HttpMethod = "Post" })%>
    </td>
</tr>
<%} %>
<tr>
    <td>
        Total
    </td>
    <td id="cart-total">
        <%: Html.DisplayFor(modelItem => item.CartTotal) %>
    </td>
</tr>

Если я обновлю страницу, то, похоже, все работает, но не с JSON. Пожалуйста, прости меня, я новичок в MVC и JSON. Это ведет меня вверх по стене.

Спасибо.

...