jquery - 如何从 MVC 中的表中删除记录
问题描述
我想从表中删除记录,然后在 MVC 中更新表。目前,我可以从表中删除记录,但表没有更新。我已经编写了脚本来更新部分但我的脚本没有命中。
请建议我如何做到这一点?
父视图
<div class="col-md-2">
@using (Html.BeginForm("HorseTracker", "HorseTracker", FormMethod.Post, new { @id = "CreateForm" }))
{
<div class="panel panel-default">
<div class="panel-body">
<div class="form-group">
@Html.LabelFor(m => m.HorseName, new { @class = "label-control" })
@Html.HiddenFor(m => m.HorseId)
@Html.TextBoxFor(m => m.HorseName)
</div>
<input type="submit" value="Save" class="btn btn-primary" />
</div>
</div>
}
</div>
<div id="partial" class="col-md-8">
局部视图
<div class="panel panel-default">
<div class="panel-body">
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.HorseName)
</th>
<th>
@Html.DisplayName("Action")
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td class="hidden">
@item.HorseId
</td>
<td>
@item.HorseName
</td>
<td>
@Ajax.ActionLink("Delete", "Delete", "HorseTracker", new {TrackerId = @item.TrackerId, AccId=item.AccId,UserId=item.UserId, @id = "DeleteRecord" }, new AjaxOptions
{
HttpMethod = "Post",
Confirm = "Are you sure you want to delete this record?"
}, null)
</td>
</tr>
}
</table>
</div>
</div>
控制器方法
[HttpPost]
public PartialViewResult Delete(int TrackerId, int AccId, int UserId)
{
ClsHorseTracker model = new ClsHorseTracker();
var username = User.Identity.Name;
var user = context.Users.SingleOrDefault(u => u.UserName == username);
model.AccId = user.AccountID;
model.UserId = user.Id;
horseTrackerDetails.HorseTrackerDelete(TrackerId);
return PartialView("_pHorseTrackerDetails", horseTrackerDetails.HorseTrackerList(model));
}
脚本
$(document).ready(function () {
var url = '@Url.Action("Delete", "HorseTracker")';
$(document).click('#DeleteRecord', function () {
debugger;
if (!$(this).valid()) {
return;
}
$.post(url, $(this).serialize(), function (response) {
if (response) {
debugger;
$('#partial').html(response);
$('#CreateForm').get(0).reset();
}
});
return false;
})
})
解决方案
您的代码存在多个问题。提几个
- 您有多个链接具有相同的
id
属性,这是无效的 html - 您使用
Ajax.AcionLink()
但随后取消它并使用$.post()
提交(这没有意义) - 链接不是表单,因此检查
if (!$(this).valid()) {
毫无意义 - 您没有向 POST 方法发送任何数据(
$(this).serialize()
正在序列化<a>
不包含任何表单控件的元素,因此没有什么要序列化的)
没有理由返回更新表的部分视图(以及这样做的不必要的额外开销)。Delete
相反,如果操作成功(您通过返回 a 表示) ,则只需删除与链接关联的行JsonResult
。
将循环代码更改为
@foreach (var item in Model)
{
<tr>
<td class="name">@item.HorseName</td>
<td><a href="#" class="delete" data-id="@item.TrackerId">Delete</a></td>
</tr>
}
并添加以下脚本
var url = '@Url.Action("Delete", "HorseTracker")';
$('.delete').click(function() {
var id = $(this).data('id');
var row = $(this).closest('tr');
var name = row.find('.name').text();
if (window.confirm('Are you sure you want to delete ' + name + '?')) {
$.post(url, { id: id }, function(response) {
if (response) {
row.remove(); // remove the row from the DOM
}
}).fail(function(response) {
.... // an exception was thrown on the server (display error message?)
});
}
});
然后将您的 POST 方法修改为
[HttpPost]
public PartialViewResult Delete(int id)
{
horseTrackerDetails.HorseTrackerDelete(id);
return Json(true);
}
推荐阅读
- java - 如何在 Java 中的地图中插入三项?
- image - react-native-image-picker 上传图片获取网络错误
- javascript - 如何自动设置从 API 检索到的图像的宽度?
- javascript - 在不使用 Vue-CLI 的情况下将样式表添加到 Vue.js 组件
- python - 我们可以对嵌套 for 循环使用列表理解,其中外部和内部 for 循环各有一个语句吗?
- node.js - 不和谐.js | 踢和禁止
- docker - 是否需要使用 Azure 容器注册表才能使用 Azure 容器?
- azure - 使用 powershell 使用访问令牌连接到 azure ad
- reactjs - 反应:将数据从子组件传递到父组件不会更新父组件中的值
- docker - 在 Dockerfile 中运行多个命令