Ajax ViewComponent запускается несколько раз

У меня проблема с событием Ajax по щелчку, которое несколько раз запускает действие контроллера/ViewComponent.

Я использовал Ajax по нажатию кнопки, чтобы вызвать действие контроллера, которое вставляет некоторые данные в базу данных, а затем перенаправляется на действие индекса контроллера/ViewComponent.

Каждый раз, когда нажимается кнопка, запускается все больше и больше событий Ajax (вставляются повторяющиеся данные).

Вот моя установка:

Кнопка Добавить в корзину:

<a asp-action="Add" asp-controller="Cart" asp-route-id="@x.ItemID" 
  ajax-call="y" ajax-res="cart" class="btn btn-info">Add to Cart</a>

JS:

 $("a[ajax-call='y']").click(function (event) {
        $(this).attr("ajax-call", "n");
        event.preventDefault();
        var urlCall = $(this).attr("href");
        var divRes = $(this).attr("ajax-res");

        $.ajax({
            type: "GET",
            url: urlCall ,
            async: true,
            success: function (data) {
                $("#" + divRes).html(data);
            }
        });
    });

КорзинаКонтроллер:

public IActionResult Index() => ViewComponent("Cart");

public IActionResult Add(int id)
{
    ... adds into db ...
    return RedirectToAction("Index");
}

CartViewComponent ~ "Корзина":

public IViewComponentResult Invoke()
{
    ... populates view model ...
    return View(Model);
}

Я загружаю свои файлы JS в общий _Layout.cshtml. Я использую PartialView, из которого нажимается кнопка Добавить в корзину, хотя я думаю, что это нормально, или это каким-то образом вызывает эту проблему?

Я начал изучать ASP.NET совсем недавно, поэтому надеюсь, что не упустил ничего очень простого.

Спасибо!


person eja    schedule 17.03.2018    source источник
comment
Я думаю, что вы каким-то образом добавляете несколько событий кликов к одному и тому же элементу. Я предлагаю очистить события перед добавлением нового события клика к элементу. Вы можете использовать .off() непосредственно перед тем, как щелкнуть событие. Это удалит все события кликов и удостоверится, что вы добавляете только одно. Это часто происходит в одностраничных приложениях.   -  person Chris    schedule 18.03.2018
comment
В конце концов я выяснил, что у коллеги был загружен скрипт, который конфликтовал с моим и добавлял повторяющиеся события. Ваш комментарий помог мне решить эту проблему, а также найти плохой код, если вы напишете ответ, я буду рад его принять, спасибо Майстренко Виталий!   -  person eja    schedule 18.03.2018
comment
Я рад, что это дало вам подсказку к решению :) Я скопирую и вставлю свой комментарий в качестве ответа, чтобы вы могли закрыть этот вопрос.   -  person Chris    schedule 24.03.2018


Ответы (1)


Я думаю, что вы каким-то образом добавляете несколько событий кликов к одному и тому же элементу. Я предлагаю очистить события перед добавлением нового события клика к элементу. Вы можете использовать .off() непосредственно перед тем, как щелкнуть событие. Это удалит все события кликов и удостоверится, что вы добавляете только одно. Это часто происходит в одностраничных приложениях.

person Chris    schedule 24.03.2018