0

所以我正在用 MVC4 创建一个网站。基本上我拥有的是一张许可证表,其中包含一堆属性。我希望能够在此表中添加复选框,以便当您选择一组许可证并单击提交按钮时,它将允许您批量编辑所选许可证的一些属性(例如,它们的发布日期) . 我似乎找不到一种简单的方法来实现这一点。

4

1 回答 1

1

我不确定是否有一种简单的方法可以做到这一点。但是,我将提出一种解决方案。步骤是:

  1. 有一个操作将许可证列表发送到视图
  2. 视图将它们显示在表格中并让用户编辑
  3. 视图将此列表发布到另一个操作
  4. 此操作接收所有许可证,无论是否编辑

所以,让我们深入研究一下。

模型

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();
}

需要注意的几点:

  1. 我正在使用jQuery
  2. 创建输入时请注意该索引。它必须从 0 开始并以 1 递增。这是模型绑定了解这是项目集合的唯一方法
  3. 在第二个动作中,您可以操纵该列表。将其保存到数据库或其他任何地方。
于 2013-08-14T19:32:36.920 回答