在我的雅虎电子邮件中,收件箱显示为电子邮件项目列表。单击该项目将显示其详细信息。现在,回到收件箱。列表中的一列是复选框。如果我单击一个或多个复选框,然后单击“删除”,则删除所有这些项目。
这或多或少是我想用ASP.NET MVC应用程序实现的。我有一个包含一些行的表,我可以勾选一些复选框来删除所选行并更新数据库。
我来自Web窗体背景。如果单击删除按钮,它将进行回发,我可以在我的代码中检查需要删除的项目。但是,我在ASP.NET MVC中这样做,我没有回发或查看状态的好处。我认为这可以通过AJAX实现,但我希望有一个更简单的解决方案,就像一个简单的表单帖子。不幸的是,我不知道从哪里开始。
此时我可以使用JQuery删除客户端上的行,但我还没有在数据库部分上有任何内容。任何提示都非常感谢。
以下是我的观看代码:
@model IEnumerable<Simplex.Data.Models.MessageBoardModel>
@{
ViewBag.Title = "Message Board";
}
<script type="text/javascript">
function deleteItems() {
$('.td_checkbox:checked').closest('tr').closest(tr).remove();
}
$(document).ready(function () {
$('#btnDelete').click(function () {
deleteItems();
});
});
</script>
<div id="content">
<h2>Board List</h2>
@{ Html.RenderAction("search", "home"); }
<div class="board_list">
<table>
<tr>
<th>
No
</th>
<th>
Subject
</th>
<th>
Posted By
</th>
<th>
Posting Date
</th>
</tr>
@foreach (var item in Model) {
<tr id=@item.Id>
<td>
@Html.DisplayFor(modelItem => item.Id)
</td>
<td class="subject">
<a href="@Url.Action("details", new { id = item.Id })"><input class="td_checkbox" type="checkbox" /> @item.Subject</a>
</td>
<td>
@Html.DisplayFor(modelItem => item.Username)
</td>
<td>
@Html.DisplayFor(modelItem => item.DatePosted)
</td>
</tr>
}
</table>
<button id="btnDelete">Delete</button>
<a href="@Url.Action("create")"><input type="button" value="Post" /></a>
</div>
答案 0 :(得分:1)
第一期,请勿使用@foreach
来消除内置的集合处理。请改用@Html.DisplayForModel()
。这将正确创建正确的索引项名称和ID。
然后在您的HttpPost处理程序中,您将希望将参数作为集合,并且您可以遍历列表并查看已设置的复选框。
答案 1 :(得分:0)
使用for
循环为每条消息呈现以下内容:
<input name="messages[@i.ToString()].Key" type="hidden" value="@item.Id" />
<input name="messages[@i.ToString()].Value" type="checkbox" value="true" />
然后像这样
捕捉你动作中的POSTed值[HttpPost]
public ActionResult Delete(Dictionary<int,bool> messages)
{
IEnumerable<int> idsOfItemsYouWantToDelete = messages.Where(pair => pair.Value).Select(pair => pair.Key);
// Do delete, return redirect or whatever
}
这是有效的,因为Dictionary<int,bool>
是KeyValuePair<int,bool>
的集合,.Key
和.Value
输入字段将与.Key
和{{1 } .Value
的属性。
您可能需要阅读ASP.NET Wire Format for Model Binding to Arrays, Lists, Collections, Dictionaries