所以我正在用 MVC4 创建一个网站。基本上我拥有的是一张许可证表,其中包含一堆属性。我希望能够在此表中添加复选框,以便当您选择一组许可证并单击提交按钮时,它将允许您批量编辑所选许可证的一些属性(例如,它们的发布日期) . 我似乎找不到一种简单的方法来实现这一点。
问问题
1455 次
1 回答
1
我不确定是否有一种简单的方法可以做到这一点。但是,我将提出一种解决方案。步骤是:
- 有一个操作将许可证列表发送到视图
- 视图将它们显示在表格中并让用户编辑
- 视图将此列表发布到另一个操作
- 此操作接收所有许可证,无论是否编辑
所以,让我们深入研究一下。
模型
public class License
{
public int Id { get; set; }
public string Name { get; set; }
public string Notes { get; set; }
}
第一个动作
public ActionResult Index()
{
List<License> viewModel = new List<License>();
viewModel.Add(new License() { Id = 1, Name = "Whatever" });
viewModel.Add(new License() { Id = 2, Name = "Whatever else" });
viewModel.Add(new License() { Id = 3, Name = "Nevermind this one" });
return View(viewModel);
}
看法
@using (Html.BeginForm("Save", "Home"))
{
<table>
<thead>
<tr>
<th>#</th>
<th>Name</th>
<th>Notes</th>
<th>Edit</th>
</tr>
</thead>
<tbody>
@{
int i = 0;
foreach (MVC4.Test.Models.License l in Model)
{
<tr>
<td><input type="text" name="licenses[@i].Id" readonly value="@l.Id"/></td>
<td><input type="text" name="licenses[@i].Name" readonly value="@l.Name" class="_mayEdit" /></td>
<td><input type="text" name="licenses[@i].Notes" readonly value="@l.Notes" class="_mayEdit"/></td>
<td><input type="checkbox" class="_edit" /></td>
</tr>
i++;
}
}
</tbody>
</table>
<input type="submit" value="Save" />
}
<script type="text/javascript">
$(function () {
$('._edit').click(function () {
if ($(this).is(':checked'))
$(this).parent().parents('tr').find('._mayEdit').removeAttr('readonly');
else
$(this).parent().parents('tr').find('._mayEdit').attr('readonly', 'readonly');
});
});
</script>
第二次行动
[HttpPost]
public ActionResult Save(License[] licenses)
{
return View();
}
需要注意的几点:
- 我正在使用jQuery
- 创建输入时请注意该索引。它必须从 0 开始并以 1 递增。这是模型绑定了解这是项目集合的唯一方法
- 在第二个动作中,您可以操纵该列表。将其保存到数据库或其他任何地方。
于 2013-08-14T19:32:36.920 回答