【问题标题】:how to disabled asp-action link after one click单击后如何禁用asp-action链接
【发布时间】:2019-08-15 12:36:03
【问题描述】:

我想在单击后禁用 asp=action 链接 我有一个 foreach 循环可以在我的视图中的表格中显示我的书 我在购物车中添加书籍的 asp-action 正在循环中,但我只想禁用已经在购物车中的书籍而不是所有书籍

 <a asp-action="AcheterLivre" asp-Controller="Achat" asp-route-id="@item.Isbn" id="disabled" onclick="return myFunction(this);"> Ajouter 

我用 jquery 尝试了一些东西,但效果不好

我试过了

 <script>
function myFunction() {
    $("#disabled").one("click", function () {
        alert("this book is already in the cart");
    });
}

我的课堂上有这个功能 它验证书籍是否在购物车中,也许我应该使用它?

public bool IsPresent(string isbn)
    {
        //rechercher si l'isbn correspond a un livre de la liste
        AchatLivreViewModel livre = ListeElements.Find(element => element.Isbn == isbn);
        if (livre != null)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    为什么不试试这个简单的方法:

    <tbody>
        @foreach (var item in Model)
                {            
                    <tr>
                        <td>
                            @item.Isbn
                        </td>                
                        <td>
                            @item.Titre
                        </td>
                        <td>
                            <label class="btn btn-primary" style="padding:0"><a href="/Home/About" class="ADD2CART" style="display:block">Add to Cart</a></label>
                        </td>
                        <td>
                            <label class="btn btn-danger" style="padding:0"><a href="/Home/About" class="RemoveFromCART" style="display:block">Remove From Cart</a></label>
                        </td>
    
                    </tr>                    
            }
    </tbody>
    

    在您的 javascript 中,如果您不想使用 Ajax,您可以使用对象数组在客户端管理您的购物车项目,我们将其命名为 CartItems:

        var CartItems = [];
    
        $('.ADD2CART').click(function () {
                if ($(this).closest('tr').hasClass("ExistingInCart")) {
                    alert('Already in Cart !!');                
                }
                else {
                    // add this item to the Cart through Ajax or 
                    // local javascript object: e.g.: 
                    CartItems.push({
                        ISBN: $(this).closest('tr').find('td:eq(0)').text().trim(),
                        Title: $(this).closest('tr').find('td:eq(1)').text().trim(),
                    });
                    $(this).closest('tr').addClass("ExistingInCart");                
                }
    
                return false; //to prevent <a> from navigating to another address
            });
    
    
    
    
    
            $('.RemoveFromCART').click(function () {
    
                $(this).closest('tr').removeClass("ExistingInCart");
    
                var isbn = $(this).closest('tr').find('td:eq(0)').text().trim();
                CartItems = CartItems.filter(x => x.ISBN !== isbn);
    
                return false;
            });
    

    一旦您需要提交或发布页面,您就会在 CartItems 数组中拥有所有已选择的书籍。


    要将此 javascript 代码添加到您的视图中,请选择以下选项之一:

    1. 将此块放在视图底部并将上述脚本复制到&lt;script&gt;&lt;/script&gt;标签内:

      @section 脚本{ <script> .... copy it here ... </script> }

    2. 复制 newFile.js 中的脚本代码并将其添加到您的视图中

      &lt;script src="~/Scripts/jquery-3.3.1.min.js"&gt;&lt;/script&gt;

      &lt;script src="~/Scripts/newFile.js"&gt;&lt;/script&gt;

    3. 您可能决定捆绑这个 newFile.js

    【解决方案2】:

    试试这个:

    <a href="/Home/About" target="_blank" yetClickable="1" onclick="return foo(this);">  Ajouter </a>
    

    还有你的 Javascript:

        function foo(input) {
            if ($(input).attr('yetClickable') === '1') {
                $(input).attr('yetClickable', '0');
                return true;
            }
            else {
                // this false returning will counteract the effect of click event on the anchor tag
                return false;
            } 
        }
    

    从购物车中删除商品后,您需要再次使用 javascript 通过其 Id 选择该商品并将 yetClickable 属性更改回 1(以便可点击)。

    注意上面的这个想法(根据您的情况)在页面没有重新加载之前有效。否则,您需要通过 Ajax 处理 Cart 上的 ADD/Remove 操作。

    希望这会有所帮助。

    【讨论】:

    • 谢谢,但它似乎不起作用:(什么是 yetClickable 属性?
    • 我在 MVC 5.2 上成功运行了代码。 YetClickable 只是一个属性,作为我们添加的任意 html 属性,用于在其内部存储每个标签的状态。
    • 对于 DOM 属性,如检查、禁用和只读,正确的方法(从 JQuery 1.6 开始)是使用 prop。请查看此链接:stackoverflow.com/questions/5995628/adding-attribute-in-jquery 正如您在此线程中看到的:stackoverflow.com/questions/14935191/… 您可以使用 .attr() 将数据属性添加到 html 标记。
    • 我不知道我是否做错了,但它不会禁用我的链接
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签