• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Skrypt JS w ASP.Net usuwa ostatni produkt z koszyka ale znika dopiero po odświeżeniu strony

Object Storage Arubacloud
0 głosów
479 wizyt
pytanie zadane 29 lutego 2020 w JavaScript przez czujek22 Dyskutant (7,670 p.)
edycja 29 lutego 2020 przez czujek22

Witam. Mam sklep internetowy i mechanizm koszyka napisany w ASP.Net i dopiąłem sobie do niego kod AJAX aby można było usuwać produkty z koszyka bez przeładowania. Kod działa i usuwa poprawnie. Podczas gdy w koszyku jest min. 2 sztuki tego samego produktu to skrypt po usunięciu zmniejsza je o jeden i wszystko dobrze aktualizuje.

Problem jest gdy zostaje ostatnia sztuka produktu i ją usuwam, wtedy wszystko sie aktualizuje na 0 więc działa poprawnie, jest efekt "slow" zanikania produktu ale od razu po zakończeniu tego efektu produkt powraca i nadal widnieje na stronie mimo, że go już nie ma w koszyku (dopiero po przeładowaniu strony koszyk jest pusty). Czy to problem ze strony AJAXA, że ten produkt wizualnie ostatecznie nie znika bo od strony backendu wszystko się usuwa?

 

<script type="text/javascript">
        $(function () {
            $(".delete_product").click(function () {

                var recordToDelete = $(this).attr("data-id");

                if (recordToDelete != '') {
                    $.post("/Cart/DeleteFromCart", { "prodId": recordToDelete },
                        function (response) {
                            if (response.RemovedItemNumber == 0) {

                                $('#cart-line-' + response.RemovedItemId).fadeOut('slow', function () {
                                    if (response.CartItemsNumber == 0) {
                                        $("#cart-empty-message").addClass("hidden");
                                    }
                                });
                            } else {
                                $('#cart-positions-number-' + response.RemovedItemId).text(response.RemovedItemNumber);
                                $('#product-total-price-' + response.RemovedItemId).text(response.CartTotalProductAmount + ' zł');
                            }

                            if (response.CartItemsNumber == 0) {
                                $('#cart-button-pay').addClass('hidden');
                                $('#total-price').addClass('invisible');
                            }
                            $('#total-price-value').text(response.CartTotalPrice);
                            $('#cart-header-number').text(response.CartItemsNumber);
                            $('#cart-header-value').text(response.CartTotalPrice + ' zł');
                            
                        });
                    return false;
                }
            });
        });
    </script>

  

CartController.cs

 public ActionResult DeleteFromCart(int prodId)
        {
            int positionsNumber = cartMenager.DeleteFromCart(prodId);
            int cartPositionsNumber = cartMenager.TakeQuantityCartPosition();
            decimal cartValue = cartMenager.TakeCartValue();
            var product = _productRepo.GetOne(prodId);
            decimal productPrice = product.ProductPrice;

            var result = new DeleteFromCartViewModel
            {
                RemovedItemId = prodId,
                RemovedItemNumber = positionsNumber,
                CartTotalPrice = cartValue,
                CartItemsNumber = cartPositionsNumber,
                CartTotalProductAmount = productPrice * positionsNumber
            };

            return Json(result);
        }
HTML Koszyka

<!-- Cart Items -->
                        <div class="cart_items">
                            <ul class="cart_items_list">
                                @foreach (var item in Model.CartPositions)
                                {
                                    <li id="cart-line-@item.Product.ProductId" class="cart_item item_list d-flex flex-lg-row flex-column align-items-lg-center align-items-start justify-content-start">
                                        <div class="product d-flex flex-lg-row flex-column align-items-lg-center align-items-start justify-content-start">
                                            <div><div class="product_image"><img src="@Url.ProductsMiniaturesPath(item.Product.ImageFileName+".jpg")" alt=""></div></div>
                                            <div class="product_name"><a href="@Url.Action("Details", "Products", new { id=item.Product.ProductId})">@item.Product.ProductTitle</a></div>
                                        </div>
                                        <div class="product_color text-lg-center product_text"><span> </span></div>
                                        <div class="product_price text-lg-center product_text"><span>Cena: </span>@item.Product.ProductPrice zł</div>
                                        <div class="product_quantity_container">
                                            <div class="product_quantity ml-lg-auto mr-lg-auto text-center">
                                                <span id="cart-positions-number-@item.Product.ProductId" class="product_text product_num">@item.Quantity</span>
                                                <!--<div class="qty_sub qty_button trans_200 text-center"><span>-</span></div>
                                                <div class="qty_add qty_button trans_200 text-center"><span>+</span></div>-->
                                            </div>
                                        </div>
                                        <div class="product_total text-lg-center product_text" id="product-total-price-@item.Product.ProductId">@(item.Product.ProductPrice * item.Quantity) zł</div>
                                        <div class="product_size text-lg-center product_text"><a class="delete_product" data-id="@item.Product.ProductId" href="#"><b>Usuń</b></a></div>
                                    </li>
                                }
                                @if (Model.CartPositions == null || Model.CartPositions.Count == 0)
                                {
                                    <li id="cart-empty-message" >
                                        <span>Twój koszyk jest pusty. Może chcesz coś dodać do koszyka?</span>
                                    </li>
                                }
                            </ul>
                            
                        </div>

 

1 odpowiedź

0 głosów
odpowiedź 29 lutego 2020 przez obl Maniak (51,280 p.)

Wysyłasz żądanie po usunięcie z koszyka, ale z widoku już nie usuwasz. Musisz uaktualnić widok (usunąć z widoku element, który usuwasz z koszyka). Przypisujesz jakiemuś elementowi klasę hidden ale to tak się nie robi. Poza tym bez HTML-a ciężko cokolwiek doradzić.

komentarz 29 lutego 2020 przez czujek22 Dyskutant (7,670 p.)
Tak ale zwracam kontrolerem pusty obiekt to chyba powinna zostać pusta wartość w koszyku po usunięciu ?

Ps. Dodałem kod kontrolera i html pozycji w koszyku
1
komentarz 1 marca 2020 przez obl Maniak (51,280 p.)

Teraz zorientowałem się dopiero, że w NET piszesz. Raczej ci za wiele nie podpowiem ale iterujesz po elementach Model.CartPositions natomiast nie widzę tutaj niczego co by z Model.CartPositions usuwało twój element z koszyka. Ja bym szukał tutaj błędu. Bo skoro po odświeżeniu działa to znaczy, że na serwerze dane się aktualizują ale u ciebie w widoku już nie. Odświerzenie pewnie pobiera dane z serwera, które są wykorzystywane do utworzenia koszyka z pozycjami.

Podobne pytania

0 głosów
1 odpowiedź 92 wizyt
0 głosów
0 odpowiedzi 221 wizyt
pytanie zadane 14 kwietnia 2017 w JavaScript przez raverssis Początkujący (330 p.)
0 głosów
0 odpowiedzi 307 wizyt

92,539 zapytań

141,382 odpowiedzi

319,481 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...