cshtml onclick按钮事件并传递一个值

问题描述 投票:0回答:3

我一直在寻找解决方案,我有一个按钮功能

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有一个值,因为它在我试图绕过的原始代码中工作

javascript是

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中按下按钮时出现以下错误

未捕获的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">

我得到了控制台中的值和“按下按钮”消息,但我的断点没有被触发,警报dosnt被触发。

我可以问一下s.ajax和$ .ajax之间有什么区别,除了后者找不到网址。

注意我也更改了控制器中的控制器名称

javascript c# razor umbraco
3个回答
0
投票

未捕获的ReferenceError:未在HTMLButtonElement.onclick中定义项目

您的button元素将项ID作为AddProduct的参数传递。该错误告诉您变量item要么不存在,要么在当前范围之外。


0
投票

将您的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
投票

找到了一种不同的方式来做到这一点。我完全不了解所有这些,但我得到了它的要点。

在控制器调用中包裹按钮,其中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)
{
......
}
© www.soinside.com 2019 - 2024. All rights reserved.