0

我正在尝试以如此简单的形式发送一些数据。我的表单有一个复选框列表,每个框旁边都有一个人的姓名和角色。我想要做的:恢复该框已被选中的人员列表。我已经创建了一个模型来做到这一点:

public class CoupleModel
    {
    public Boolean isSelected { get; set; }
    public String name {get; set;}
    public String login { get; set; }
    public String role { get; set; }
    public CoupleModel(String name, String login, String role)
    {
        this.name = name;
        this.login = login;
        this.role = role;
        this.isSelected = false;
    }

    public CoupleModel()
    {
        this.isSelected = false;
    }
}

我的表格如下所示:

@using (Html.BeginForm("CreateInventory", "Home"))
{
    @Html.Action("PersonListInventory")
    <button type="submit" class="btn btn-primary">Validate creation</button>
}

和它链接的 PartialView 是这个:

@model List<MyApp.Models.CoupleModel>
<table class="table table-striped table-bordered"">
    <tbody>
         @for (int i = 0; i < Model.Count(); i++) {
            <tr>
                <td>
                    @Html.EditorFor(m => m[i].isSelected)
                </td>
                <td>
                    @Html.EditorFor(m => m[i].name)
                </td>
                <td>
                    @Html.EditorFor(m => m[i].role)
                </td>
            </tr>
        }
    </tbody>
</table>

然后,在我的控制器视图中,我只想列出已选中该框的人员的姓名:

[HttpPost]
    public ActionResult CreateInventory(List<CoupleModel> model)
    {
        String res = "";
        foreach (var item in model) {
            if (item.isSelected)
            {
                res += "selected : " + item.login + "<br>";
            }
            else
            {
                res += item.login + "<br>";
            }
        }
        ViewBag.Res = res;
        return View();
    }

但是只设置了“isSelected”部分,也就是说登录时显示时总是空白的。为什么没有设置?我需要做一些特殊的绑定吗?

4

2 回答 2

2

也就是说登录时显示时总是空白的。

这是完全正常的。您的表单中没有相应的字段。您需要将其添加为隐藏字段:

@Html.HiddenFor(m => m[i].login)
于 2013-07-02T13:12:18.233 回答
1

您需要为@Html.HiddenFor(..)要传递的字段添加 s。

结果:

@for (int i = 0; i < Model.Count(); i++) {
@Html.HiddenFor(m => m[i].login)

<tr>
    <td>
        @Html.EditorFor(m => m[i].isSelected)
    </td>
    <td>
        @Html.EditorFor(m => m[i].name)
    </td>
    <td>
        @Html.EditorFor(m => m[i].role)
    </td>
</tr>
}

另一方面,请使用 .NET 命名约定。

于 2013-07-02T13:10:48.240 回答