jquery - 我只从 asp.net Razor View 中获取 jQuery 中的第一个 id

标签 jquery asp.net ajax asp.net-mvc razor

我正在使用 asp.net mvc 和 Razor。这是我的代码

    @foreach (var item in Model)
    {
                <button class="btn btn-danger btn-xs" id="deleteSystemData" data-toggle="modal" data-target="#deleteModal" data-id="@item.SerialNumber">Delete reported data</button>
}

<script>
    window.onload = function () {
        var serialNumber;

        $('#deleteSystemData').click(function (e) {
            e.preventDefault();
            serialNumber = $(this).data('id');
            console.log("This number: " + serialNumber);
            $("#deleteModal #serial-number").text(serialNumber);
        });

        $('#deleteConfirmed').click(function () {
            $.ajax({
                url: '/MeterReading/DeleteSystemData',
                data: { serialNumber: serialNumber }
            }).done(function() {
                $('#deleteModal').modal('toggle');
                $("#delete-system-data-success").slideDown(500)
                  .delay(2500)
                  .slideUp(500);
            }).error(function () {
                $('#deleteModal').modal('toggle');
                $("#delete-system-data-error").slideDown(500)
                  .delay(2500)
                  .slideUp(500);
            }
            );
        });

    }
</script>

我在所有按钮上都得到了正确的data-id="@item.SerialNumber"。 但我的 jQuery 代码仅适用于第一个按钮。我在第一次点击事件中添加了一个 console.log (这个数字),当我点击第一个按钮时,我在日志中得到一个 Id,但其余的在 jQuery 脚本中没有任何 Id。

我的目标是将 id 从按钮传递到 asp.net Controller 并删除具有该 id 的内容。我还有一个引导模式,但效果很好。

最佳答案

您不应该有多个具有相同 ID 的元素(可以将其放在纯 HTML 中,因为它不会破坏任何内容,但如果您想在这些 id 上使用 Jquery那么它是一个大NO!!!)如果你这样做,那么当你编写Jquery来选择具有id的元素时,它将始终返回DOM中从页面顶部开始的具有给定id的第一个元素。

解决方案: 向按钮添加类而不是 id,然后编写脚本来使用该类。

因此,如下更改 for 循环内的 HTML

 @foreach (var item in Model)
 {
  <button class="btn btn-danger btn-xs deleteSystemData" data-toggle="modal" data-target="#deleteModal" data-id="@item.SerialNumber">Delete reported data</button>
  }

注意 我已删除 id 并将其添加到类中

接下来将脚本部分更改为下面

$('.deleteSystemData').click(function (e) {
  e.preventDefault();
  serialNumber = $(this).data('id');
  console.log("This number: " + serialNumber);
  $("#deleteModal #serial-number").text(serialNumber);

});

注意我已将选择器#deleteSystemData更改为.deleteSystemData

关于jquery - 我只从 asp.net Razor View 中获取 jQuery 中的第一个 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36762700/

相关文章:

c# - 等待文件存在于 ASP.NET 中

javascript - 如何更改fullcalendar中ajax发送的 'start'和 'end'参数?

javascript - Angular 链 promise 在第一个之后立即

javascript - 单击按钮时添加新的文本字段,并通过单击 Laravel 4 中的按钮删除

javascript - 如何根据特定条件隐藏行

javascript - 使用 javascript(或 jQuery)选择和操作 CSS 伪元素,例如::before 和::after

php - 使用 PHP 和 JS 生成相同的 HTML

javascript - <option> append 在 jquery 中不起作用

javascript - 如何写入 div .net 下拉列表的值

c# - 在具有服务层的多层架构中,一个服务调用另一个服务是否可以接受?