Reza kavian Ответов: 2

Как получить доступ к свойству класса, которое я получаю с помощью ajax


in index.cshtml i use ajax in click event of .removelink to get changes from action controller
As follows :


$(".RemoveLink").click(function () {<br />
                    // Get the id from the link<br />
                    var recordToDelete = $(this).attr("data-id");<br />
                    if (recordToDelete != '' || recordToDelete != null) {<br />
                        // Perform the ajax post                             <br />
                    $.ajax({<br />
                            //contentType: 'application/json',<br />
                            //dataType: 'text',<br />
                            type: 'post',<br />
                            dataType: 'JSON',<br />
                            url: '/ShoppingCart/RemoveFromCart/',<br />
                            data: { id: recordToDelete },<br />
                            success: function (data) {  <br />
                                if (data.ItemCount == 0) {<br />
                                    $('#row-' + data.DeleteId).fadeOut('slow');<br />
                                }<br />
                                else {<br />
                                    $('#item-count-' + data.DeleteId).text(data.ItemCount);<br />
                                }<br />
                                $('#cart-total').text(data.CartTotal);<br />
                                $('#update-message').text(data.Message);<br />
                                $('#cart-status').text('Cart (' + data.CartCount + ')');<br />
                            }<br />
                        });                   <br />
                    }               <br />
                });




and in controller:


<pre>//AJAX: /ShoppingCart/RemoveFromCart/5<br />
        [HttpPost]<br />
        public IActionResult RemoveFromCart(int id)<br />
        {<br />
            //Remove the item from the cart<br />
            var cart = ShoppingCart.GetCart(this.HttpContext);<br />
            // Get the name of the album to display confirmation<br />
            //string albumName = _context.Carts<br />
            //.Single(item => item.RecordId == id).Album.Title;<br />
            Cart cartt = ShoppingCart.getCartForGetalbumName(id);<br />
            // Remove from cart<br />
            int itemCount = cart.RemoveFromCart(id);<br />
            // Display the confirmation message<br />
            var results = new ShoppingCartRemoveViewModel<br />
            {<br />
                Message = HtmlEncoder.Default.Encode(cartt.Album.Title) +<br />
            " has been removed from your shopping cart.",<br />
                CartTotal = cart.GetTotal(),<br />
                //CartCount = cart.GetCount(),<br />
                ItemCount = itemCount,<br />
                DeleteId = id<br />
            };<br />
            return Json(results);     <br />
        }</pre>



but it don't work and the text of the tags doesn't change and fadeOut() doesn't work.
Please help me to resolve my problem which I have been involved for several days


Что я уже пробовал:

in index.cshtml i use ajax in click event of .removelink to get changes from action controller, but this don't work 

2 Ответов

Рейтинг:
12

Reza kavian

я добавьте следующий код, чтобы преобразовать данные в формат 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 + ')');
}
                        });       
           
                }               
            });


MadMyche

Пожалуйста, добавьте это к вашему первоначальному вопросу, объяснив, что именно это заставило его работать.

Рейтинг:
0

MadMyche

Самая большая помощь в решении вашей проблемы будет заключаться в вас и использовании доступных вам отладчиков, чтобы выяснить, где происходит поломка. Есть 2 отдельных отладчика, которые вы можете использовать:

1. в вашем браузере есть отладчик, который может помочь вам с помощью javascript, сети и некоторых других ошибок. Вы можете получить доступ к этому, щелкнув правой кнопкой мыши на странице и выбрав опцию "Проверить". Вопросы, на которые это может ответить, доступны в разных панелях
_a есть ли ошибки в вашем javascript при новой загрузке страницы?
_b_ возникает ли ошибка при нажатии кнопки?
_d_ выполняется ли сетевой запрос при нажатии на кнопку?
_c_ какой код ответа возвращается (если таковой имеется) при нажатии кнопки?

2. Отладчик Visual Studio. Установите точку останова для действия контроллера и запустите приложение в режиме отладки. используйте клавишу F11, чтобы выполнить это действие и посмотреть, все ли работает хорошо.


Тем не менее, ваш вызов AJAX действительно имеет определенную функцию успеха, но есть также функции, которые могут быть добавлены для сбоев. Я бы посмотрел на то, чтобы использовать это, чтобы получить некоторую обратную связь о любых ошибках, которые возвращаются


Reza kavian

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

MadMyche

Похоже, что ваше действие контроллера хочет, чтобы ему было отправлено целое число

Reza kavian

Я преобразовать результаты для типа JSON затем отправить его.работал для меня