Избегайте репликации JavaScript в частичных представлениях - PullRequest
1 голос
/ 14 мая 2019

Этот код используется для удаления элемента корзины из частичного представления.

$(document).on('click', '.RemoveLink', (function (e) {
    e.preventDefault();
    var recordToDelete = $(this).attr("data-id");
    var itemID = $(this).attr("data-itemid");
    if (recordToDelete != '') {
        $.post("/ShoppingCart/RemoveFromCart", { "id": recordToDelete, "itemID": itemID },
            function () {
                $('.container-cart').load('@Url.Action("cartDropDown","ShoppingCart")', function () {
                    $('.cart-dropdown').css('display', 'inline-block');
                }
                );
            });
    }
}));

Это хорошо работает для первой итерации, но начиная со второй итерации, каждый щелчок при удалении элемента приводит к удалению 2 элементов одного вида. Предположим, у нас было 4 предмета карандашей и 8 предметов ручек. Нажав кнопку «Удалить карандаш» один раз, вы удалите 2 карандаша и наоборот.

Это, вероятно, из-за используемой логики. Ниже приводится HTML, который отображается при выполнении $('.container-cart').load('@Url.Action("cartDropDown","ShoppingCart")':

@model OnlineStore.ViewModels.ShoppingCartViewModel
<div class="container-cart">
    @if (Model.ItemCount == 0)
    {
        <div>
            <span>
                There are no items in your cart. Continue shopping.
            </span>
        </div>
    }
    else
    {
        <ul class="cart-dropdown">
            <li>
                <div class="cart-items cart-caption">
                    <ul>
                        @foreach (var i in Model.CartItems)
                        {
                            <li id="list-item-@i.item.ItemID">
                                <div class="container-fluid item-wrap" style="position: relative">
                                    <div class="item-remove">
                                        <a href="#" class="RemoveLink"
                                           data-id="@i.RecordID" data-itemid="@i.item.ItemID">
                                            x
                                        </a>
                                    </div>
                                    <div class="col-md-2 item-img">
                                        <div class="row-cart">
                                            <img alt="" id="cartImg" height="71" width="75" src="@i.item.ImageUrl">
                                        </div>
                                    </div>
                                    <div class="col-md-5 item-info">
                                        <div class="row-cart">
                                            <div class="brand-name">
                                                <a href="#" class="brandName">
                                                    @i.item.BrandName
                                                </a>
                                            </div>
                                            <div class="product-name">
                                                <a href="#" class="productName">
                                                    @i.item.ItemName
                                                </a>
                                            </div>
                                            <div class="product-qty">
                                                <p class="productQTY" id="item-count-@i.item.ItemID">
                                                    @i.Count x @i.item.ItemPrice
                                                </p>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="col-md-5 price-info">
                                        <div class="row-cart" style="margin-top: 10px">
                                            <div class="col-md-6">
                                                <div class="row-mrp">
                                                    <span class="cartItemPrice" id="item-total-@i.item.ItemID">
                                                        Rs @(@i.Count * @i.item.ItemPrice)
                                                    </span>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </li>
                        }
                    </ul>
                </div>
            </li>
            <li class="clearfix">
                <div class="col-md-6">
                    <div class="row-cart sub-cost" style="background: #fff; margin-left: -10px; margin-right: 0">
                        <p>
                            Sub Total :
                            <span style="float: right">
                                Rs
                                <span class="ng-binding"></span>
                            </span>
                        </p>
                        <p>
                            Delivery Charge :
                            <span qa="delChargeMB" style="float: right">Free</span>
                        </p>
                    </div>
                    <div class="row-cart cart-chkout-btn">
                        <button type="button">View Basket &amp; Checkout</button>
                    </div>
                </div>
            </li>
        </ul>
    }
</div> 

Этот HTML-код является частичным представлением, которое первоначально отображается, когда пользователь нажимает кнопку, чтобы просмотреть элементы корзины. Поэтому, когда пользователь нажимает кнопку «удалить элемент» в этом частичном представлении, на сервер отправляется ajax-вызов, чтобы удалить элемент из корзины, и при успешном выполнении снова загрузите пользовательский интерфейс, снова отобразив это частичное представление с новыми значениями. из базы данных.

Все это прекрасно работает для первой итерации удаления элемента из списка элементов корзины. Но когда я снова удаляю элемент как второе удаление, код выполняется дважды. Я предполагаю, что это потому, что <div class="container-cart"> отображается на странице дважды, так как после первого удаления, я вижу это в реальном DOM внутри браузера, что <div class="container-cart"> находится внутри другого <div class="container-cart">, а затем нормальные элементы отображается в последовательности. Я предполагаю, может быть, поэтому javaScript отображается дважды или работает дважды.

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

Заранее спасибо

1 Ответ

0 голосов
/ 14 мая 2019

После удаления элемента попробуйте использовать location.reload ();вместо того, чтобы снова использовать метод действия MVC!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...