cshtml событие кнопки onclick и передать значение - PullRequest
0 голосов
/ 01 марта 2019

Я искал решение для этого у меня есть функция кнопки

html

<button class="snipcart-add-item btn c8-bg c5-text" onclick="AddProduct(item.Id)">

    @umbraco.library.GetDictionaryItem("USN Shop Add to Basket Listing")
</button>

item.id получил значение, так как он работает в исходном коде, который япытается обойти

java-скрипт

function AddProduct(ptr) {
    $('select').on('click', function () {
        s.ajac({
            url: '/CartSurface/ProductAddToCart',
            data: "{'productId':ptr}",
        }).done(function () {
            alert('Added');
        });
    });
    console.log("Button Pressed")
}

, и я получаю следующую ошибку при нажатии кнопки в console.log

Uncaught ReferenceError: элемент не определенна HTMLButtonElement.onclick

контроллер

public static void ProductAddToCart(int productId)
{
  ......
}

Я думаю, что упустил что-то глупо простое, но я не могу это увидеть

Подписки на комментарии

Спасибо собственноеизменил код на

function AddProduct(value) {
        $('select').on("click", function () {
            s.ajac({
                url: '/IBDCartSurface/ProductAddToCart',
                data: "{'productId': value}",
            }).done(function () {
                alert('Added');
            });
        });
        console.log(value);
        console.log("Button Pressed");
    }

<button class="snipcart-add-item btn c8-bg c5-text" onclick="AddProduct(value)" value="@item.Id">

Я получаю значение в консоли и сообщение «Нажата кнопка», но моя точка останова не срабатывает, и не запускается предупреждение.

Могу я спроситьВ чем разница между s.ajac и $ .ajax, кроме последнего, не может найти URL.

Примечание. Я также изменил имя контроллера в контроллере

Ответы [ 3 ]

0 голосов
/ 01 марта 2019

Измените свой JS на что-то вроде:

document.on("click", "#buttonId", function(){
    data = $(this).attr("data-id");
    s.ajac({
        url: '/CartSurface/ProductAddToCart',
        data: "{'productId': data}",
    }).done(function () {
        alert('Added');
    });
}

Затем измените свой HTML на

<button class="snipcart-add-item btn c8-bg c5-text" id="buttonId" data-id="item.id">
    @umbraco.library.GetDictionaryItem("USN Shop Add to Basket Listing")
</button>
0 голосов
/ 04 марта 2019

Нашли другой способ сделать это.Я не совсем понимаю все это, но я понимаю суть.

Оберните кнопку в вызове контроллера, где id - это имя функции контроллера.Означает, что нет необходимости переводить из одного типа кода в другой и т. Д.

значения извлекаются из 2 входных тегов

csHtml

using (Html.BeginUmbracoForm<IBDCartSurfaceController>("SiteWideAddToBasket", null, new { @class = "form", role = "form" }))
{
  <input type="hidden" id="productPageId" name="productPageId" value="@item.Id" />
  <input type="hidden" id="productPrice" name="productPrice" value="@item.ProductCurrentPrice" />
  <button class="snipcart-add-item btn c8-bg c5-text" id="addToBasket" type="submit">
    @umbraco.library.GetDictionaryItem("USN Shop Add to Basket Listing")
  </button>
}

Тогда контроллер равен

[HttpPost]
public ActionResult SiteWideAddToBasket(int productPageId, decimal productPrice)
{
......
}
0 голосов
/ 01 марта 2019

Uncaught ReferenceError: элемент не определен в HTMLButtonElement.onclick

Ваш элемент кнопки передает идентификатор элемента в качестве аргумента для AddProduct.Ошибка говорит вам, что переменная item либо не существует, либо находится за пределами текущей области.

...