C# MVC 提交值列表



我希望用户在网格中输入数字列表,有点像宾果卡。

我的模型由一个"大小"(如果为 4,网格将是 4 x 4(和一个"字段"对象列表组成。字段由 X、Y 和值属性组成。

public class MyGrid {
    public List<MyField> Fields { get; set; }
    public int Size { get; set; }
    public MyGrid() {
        Size = 9;
        Fields = new List<MyField>();
        for (int y = 0; y < Size; y++) {
            for (int x = 0; x < Size; x++) {
                Fields.Add(new MyField { X = x, Y = y });
            }
        }
    }
}
public class MyField {
    public int X { get; set; }
    public int Y { get; set; }
    public int Value { get; set; }
    public MyField() {}
}

现在,我希望我的视图呈现文本框网格。

@model MyGrid
@using (Html.BeginForm("Initialize", "MyGrid")) {
    <table>
        @for (int y = 0; y < Model.Size; y++) {
            <tr>
                @for (int x = 0; x < Model.Size; x++) {
                    <td>
                        @Html.TextBoxFor(s => s.Fields.Where(f => f.X == x && f.Y == y).First().Value)
                    </td>
                }
            </tr>
        }
    </table>
    <button type="submit">Submit</button>
}

到目前为止,这是有效的。但是所有文本框都有 ID "值"。

有没有办法创建这个网格,以便我可以将整个网格提交到单个模型中?

使用此链接,我找到了答案: https://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/

我已经改变了我的观点(目前(:

以前:

<td>
    @Html.EditorFor(s => s.Fields.Where(f => f.X == x && f.Y == y).First().Value)
</td>

后:

<td>
    <input type="hidden" name="fields.Index" value="field_@x@y">
    @Html.TextBoxFor(s => s.Fields.Where(f => f.X == x && f.Y == y).First().Value, new { @Name = "fields[field_" + x + y + "].Value" } )
</td>

因此,对于每个字段,将有一个"字段。索引"隐藏属性。 文本框本身将具有与隐藏字段的值和附加到它的属性相对应的名称。

这似乎有效

最新更新