C# 从Razor文件中定义的href调用Javascript函数

C# 从Razor文件中定义的href调用Javascript函数,c#,javascript,ajax,asp.net-mvc,razor,C#,Javascript,Ajax,Asp.net Mvc,Razor,因此,我有一个函数cart.remove(itemid),它使用ajax调用从购物车中删除一个项目。cart对象在其自己的javascript文件中定义,其函数可以访问,remove()函数可以正常工作以按预期删除项目。单击下面的链接后,会弹出一个警报,确认您是否确实要删除该项目。如果是,它将从购物车中删除该项目 @if (Model.Count > 0) { foreach (var item in Model.Items) { <div>&l

因此,我有一个函数
cart.remove(itemid)
,它使用ajax调用从购物车中删除一个项目。
cart
对象在其自己的javascript文件中定义,其函数可以访问,
remove()
函数可以正常工作以按预期删除项目。单击下面的链接后,会弹出一个警报,确认您是否确实要删除该项目。如果是,它将从购物车中删除该项目

@if (Model.Count > 0)
{
    foreach (var item in Model.Items)
    {
        <div><a title="Remove item from cart" href="javascript:cart.remove(@(item.ItemID));">Remove Item</a></div>
    }

}

由于javascript函数是在循环中定义的,因此每次名称都需要不同,因此函数名称中的itemid也就不同了。它应该抓取自定义删除项文本,然后调用
cart.remove()
,就像之前在href定义中所做的那样问题是没有调用此函数
removietem@(item.ItemId)(
即使我只是在函数中放入
alert()
console.log()
,代码也不会触发。有没有办法做到这一点?我还尝试使用绑定到
'或
`上的类的单击侦听器来调用该函数。有什么建议吗?通过查看页面源代码,我可以清楚地看到,购物车的每个当前项目都定义了自己的“删除项目”功能,但由于某些原因,代码无法访问。

请尝试使用此选项以确定大小,当然,如果您想要更好的解决方案,使用JQuery可以更轻松地完成所有这一切:

@if (Model.Count > 0)
{
    foreach (var item in Model.Items)
    {
        <div><a title="Remove item from cart" id="@item.ItemID" hreaf="javascript:return RemoveItem(@item.ItemID);" data-message="@Model.GetRemoveItemAlertText(item.ItemID)">Remove Item</a></div>
    }
}

<script>

  function RemoveItem(itemId)
  { 
     var element = document.getElementById(itemId.toString());
     var alerttext = element.getAttribute('data-message');

     return cart.remove(@(item.ItemID), alerttext);
  }

</script>
@if(Model.Count>0)
{
foreach(Model.Items中的var项)
{
}
}
$(文档).ready(函数(){
$('.cart item')。单击(函数(e){
e、 stopProgagation();
cart.remove($(this.data('itemid'),$(this.data('message'));
});
});

您愿意使用jquery解决方案吗?是的,jquery很好。这就是我尝试使用onclick listner时使用的方法。我更新了JQuery的答案。虽然这对我来说仍然不起作用,但它让我走上了解决问题的轨道。我没有提到,这也是为什么我认为它不起作用的原因,因为整个视图都是通过ajax调用加载到视图中的,所以我认为在听到单击时,视图中的函数定义可能不再可访问。但是我最终使用了一个数据消息属性来允许cart.remove()函数通过抓取元素而不是作为参数传递来查看消息。谢谢。在这种情况下,您可能必须使用
$('.cart item')。而不是('click',function()
@if (Model.Count > 0)
{
    foreach (var item in Model.Items)
    {
        <div><a title="Remove item from cart" id="@item.ItemID" hreaf="javascript:return RemoveItem(@item.ItemID);" data-message="@Model.GetRemoveItemAlertText(item.ItemID)">Remove Item</a></div>
    }
}

<script>

  function RemoveItem(itemId)
  { 
     var element = document.getElementById(itemId.toString());
     var alerttext = element.getAttribute('data-message');

     return cart.remove(@(item.ItemID), alerttext);
  }

</script>
@if (Model.Count > 0)
{
    foreach (var item in Model.Items)
    {
        <div><a title="Remove item from cart" href="#" class="cart-item" data-itemid="@item.ItemID" data-message="@Model.GetRemoveItemAlertText(item.ItemID)">Remove Item</a></div>
    }
}

<script>

 $(document).ready(function(){

    $('.cart-item').click(function(e){
       e.stopProgagation();
       cart.remove($(this).data('itemid'), $(this).data('message'));
    });

 });

</script>