【发布时间】:2017-03-24 05:50:34
【问题描述】:
MVC 5 项目。使用模态视图。模态有 2 个部分。顶部是一个带有“添加”按钮的下拉列表。下面是主表,具有行删除功能(如下所述)。它应该如何工作:如果用户单击“添加”,则条目将进入表中。这工作正常。我正在尝试让特定于行的删除功能现在正常工作。让我描述一下这个问题......
我基本上有一个包含许多项目的表格,每行都有一个删除按钮。行是这样创建的...
<table class="table table-striped">
<tr>
<th>
@Html.DisplayNameFor(model => model.Filter.Filter1)
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Filter.Filter1)
</td>
<td>
@using (Html.BeginForm("DeleteFromModal", "carColorsFilters", FormMethod.Post))
{
<b>@item.Id</b>
@Html.Hidden("id", item.Id)
@Html.Hidden("carColorId", (Int32)ViewBag.carColorId)
<input class="btn btn-primary" type="submit" value="Delete" />
}
</td>
</tr>
}
</table>
我的帖子操作被定义为...
public ActionResult DeleteFromModal(int id, int carColorId)
{
carColorsFilter carColorsFilter = db.carColorsFilters.Find(id);
db.carColorsFilters.Remove(carColorsFilter);
db.SaveChanges();
ViewBag.carColorId = carColorId;
ViewBag.FilterId = new SelectList(db.Filters, "Id", "Filter1");
var carColorsfilters = db.carColorsFilters
.Where(a => a.carColorId == carColorId)
.Include(a => a.carColor)
.Include(a => a.Filter);
return View("_Index", carColorsfilters.ToList());
}
此视图显示为模式弹出窗口。
当模式第一次加载时,我仔细检查了 ID 的 HTML 隐藏字段(使用查看源代码),它们都是正确的。但是,当我单击删除按钮时,无论哪一行,第一行的 ID 总是传递给操作。
然后,如果我立即再次检查 HTML 隐藏字段,ID 的所有隐藏字段都是完全相同的,即 ORIGINAL 第一行的 ID(在原始删除单击中被删除),所以出现错误发生。
任何想法为什么会发生这种情况?
这是模态动作的源代码...
<script type="text/javascript">
$(function () {
$.ajaxSetup({ cache: false });
$("a[data-modal]").on("click", function (e) {
// hide dropdown if any (this is used wehen invoking modal from link in bootstrap dropdown )
//$(e.target).closest('.btn-group').children('.dropdown-toggle').dropdown('toggle');
$('#myModalContent').load(this.href, function () {
$('#myModal').modal({
/*backdrop: 'static',*/
keyboard: true
}, 'show');
bindForm(this);
});
return false;
});
});
function bindForm(dialog) {
$('form', dialog).submit(function () {
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function (result) {
if (result.success) {
$('#myModal').modal('hide');
$('#replacetarget').load(result.url); // Load data from the server and place the returned HTML into the matched element
} else {
$('#myModalContent').html(result);
bindForm(dialog);
}
}
});
return false;
});
}
</script>
【问题讨论】:
-
你能详细说明“第二次”是什么意思吗?
-
@Shyju 这张桌子很完美。 3 行,全部带有单独的 id 和删除按钮等。我单击删除,它运行良好,行消失。我在另一行上单击删除,但它失败了。原因是传递给控制器的 item.id 是原始的(已删除。)
-
你有一些拦截删除表单提交的js代码吗?
-
@Shyju 不,我没有
-
而就返回视图时的
id值而言,这是因为id已在POST 方法中添加到ModelState。您可以在return View(..)语句之前使用ModelState.Clear()来解决这个问题。
标签: c# asp.net-mvc razor