我想从表中删除记录,然后在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;
})
})发布于 2018-08-21 03:13:22
您的代码有多个问题。举几个例子
id属性的多个链接,这是无效的html。Ajax.AcionLink(),然后取消它,并使用$.post()提交(这是没有意义的)if (!$(this).valid()) {没有任何意义。$(this).serialize()正在序列化不包含任何表单控件的<a>元素,因此没有任何可序列化的内容)没有理由返回更新后的表的部分视图(以及它不必要的额外开销)。相反,如果Delete操作成功,只需删除与链接关联的行(您可以通过返回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);
}https://stackoverflow.com/questions/51940220
复制相似问题