如何使用 ajax 调用删除数据库行并更新页面中的 table?

How to use ajax call for deleting database rows and updating the table in the page?

我的页面中有一个 table,其内容是根据数据库条目填充的。我使用 foreach 循环 遍历数据库行并填充 table。最后一列有删除按钮,显示在每一行中。此按钮从 table.

中删除该特定行
int i = 1;    
foreach (var item in Model.messages as List<Message>)
    {    
    <tr>
            <td>@i</td>
                                                                
            <td>@dConverter.DateConverter(@item.messageDate.ToShortDateString())</td>
                                                                
            <td>@dConverter.GetTime(@item.messageDate.ToString())</td>
            <td>@Model.usersList.First(x => x.Id == item.senderId).department</td>
            <td>
                <a href="" class="message-link" data-toggle="modal" data-target="#myModal-@i">Open Message</a>
                <input type="hidden" id="msg-id-@i" value="@item.messageId"/>
            </td>
            <td><a type="button" style="color: red" class="message-link" id="del-@i">Delete</a></td>
        </tr>
i++;
    }

我想使用 ajax 调用来完成此任务:

<script>
    $(document).ready(function(){
        $('#del-@i').on("click", function(){
            var msgId = $('#msg-id-@i').val();
            var formData = new FormData();
            formData.append("messageId", msgId);

            $.ajax({
                type: "POST",
                url: "Messages/DeleteMessage",
                contentType: false,
                processData: false,
                data: formData,
                success: function(response){
                    if(response.success){
                        alert("The selected message removed.");
                    }else{
                        alert("Error!");
                    }
                }
            })
        });
    });
</script>

执行删除任务的操作代码是:

[HttpPost]
        public JsonResult DeleteMessage(int messageId) 
        {
            bool response = _messageRepository.DeleteMessageById(messageId);
            if(response == true)
            {
                return Json(new { success=true});
            }
            else
            {
                return Json(new { success=false });
            }
        }

问题是当我按下按钮时,没有任何反应。我尝试调试控制器中的动作,发现按下按钮时没有调用此动作。 ids 与 javascript 和剃须刀代码之间可能存在匹配错误。我该如何解决?

问题似乎是 javascript 中列出的 ids 不会包含 i 的正确值,因为脚本的生成不会发生在for loop.

** 这个答案利用了 jQuery 选择器 closest

以下是我建议的更改;

  1. 向其中包含 ID 的行添加一个属性。
    <tr msg-id="@item.messageId">
  1. 更改您的 js 以确定单击按钮的行并提取该 ID。
    $(document).ready(function(){
        $('.message-link').on("click", function(){
            var msgId = $(this).closest("tr").attr("msg-id");
            var formData = new FormData();
            formData.append("messageId", parseFloat(msgId));

            $.ajax({
                type: "POST",
                url: "Messages/DeleteMessage",
                contentType: false,
                processData: false,
                data: formData,
                success: function(response){
                    if(response.success){
                        alert("The selected message removed.");
                    }else{
                        alert("Error!");
                    }
                }
            })
        });
    });