Проблемы с доступом к свойству класса в Ajax - PullRequest
0 голосов
/ 12 января 2020

В index.cshtml Я использую Ajax. В случае нажатия .removelink, чтобы получить изменения от контроллера действий следующим образом:

 $(".RemoveLink").click(function () {
                    // Get the id from the link
                    var recordToDelete = $(this).attr("data-id");
                    if (recordToDelete != '' || recordToDelete != null) {
                        // Perform the ajax post                             
                    $.ajax({
                            //contentType: 'application/json',
                            //dataType: 'text',
                            type: 'post',
                            dataType: 'JSON',
                            url: '/ShoppingCart/RemoveFromCart/',
                            data: { id: recordToDelete },
                            success: function (data) {  
                                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 + ')');
                            }
                        });                   
                    }               
                });

И в контроллере:

//AJAX: /ShoppingCart/RemoveFromCart/5
        [HttpPost]
        public IActionResult 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 albumName = _context.Carts
            //.Single(item => item.RecordId == id).Album.Title;
            Cart cartt = ShoppingCart.getCartForGetalbumName(id);
            // Remove from cart
            int itemCount = cart.RemoveFromCart(id);
            // Display the confirmation message
            var results = new ShoppingCartRemoveViewModel
            {
                Message = HtmlEncoder.Default.Encode(cartt.Album.Title) +
            " has been removed from your shopping cart.",
                CartTotal = cart.GetTotal(),
                //CartCount = cart.GetCount(),
                ItemCount = itemCount,
                DeleteId = id
            };
            return Json(results);     
        }

Однако это не работает. Кроме того, текст тегов не меняется и fadeOut() не работает.

Когда я отправляю единичное поле (например, строку или целое число), Джейсон хорошо его читает. Однако когда я отправляю класс, содержащий некоторые свойства (как в примере выше), его значение в параметре data является проблематичным c.

Ответы [ 2 ]

0 голосов
/ 14 января 2020

я добавляю следующий код для преобразования данных в json в действии контроллера RemoveFromCart:

var resulTtoJson = Newtonsoft.Json.JsonConvert.SerializeObject(results);  

и тип возврата json:

[HttpPost]
        public IActionResult 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 albumName = _context.Carts
            //.Single(item => item.RecordId == id).Album.Title;
            Cart cartt = ShoppingCart.getCartForGetalbumName(id);
            // Remove from cart
            int itemCount = cart.RemoveFromCart(id);
            // Display the confirmation message
            var results = new ShoppingCartRemoveViewModel
            {
                Message ="محصول"+ cartt.Album.Title +
            "از سبد خریدتان حذف گردید.",
                CartTotal = cart.GetTotal(),
                //CartCount = cart.GetCount(),
                ItemCount = itemCount,
                DeleteId = id
            };

            var resulTtoJson = Newtonsoft.Json.JsonConvert.SerializeObject(results);

            return Json(resulTtoJson);  

также добавьте следующий код чтобы преобразовать данные в javascript, введите:

var data =JSON.parse(dataa);  

и используйте его:

$(".RemoveLink").click(function () {
                // Get the id from the link
                var recordToDelete = $(this).attr("data-id");
               // alert(recordToDelete);
                if (recordToDelete != '' || recordToDelete != null) {
                    // Perform the ajax post
                    $.post("/ShoppingCart/RemoveFromCart/", { id: recordToDelete},
                        function (dataa) {
                            // Successful requests get here
                            // Update the page elements
                                 var data =JSON.parse(dataa);

                            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 + ')');
}
                        });       

                }               
            });
0 голосов
/ 13 января 2020

Пожалуйста, измените вашу собственность на строчные, попробуйте использовать:

success: function (data) 
{  
    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 + ')');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...