C # MVC Отправка списка значений - PullRequest
0 голосов
/ 29 апреля 2018

Я хочу, чтобы пользователь ввел список чисел в сетке, вроде бинго-карты.

Моя модель состоит из «размера» (если 4, сетка будет 4 на 4) и списка «полевого» объекта. Поле состоит из свойств X, Y и Value.

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>
}

Пока это работает. Но все текстовые поля имеют идентификатор «Значение» источника.

Есть ли способ создать эту сетку, чтобы я мог отправить всю сетку в одну модель?

1 Ответ

0 голосов
/ 04 мая 2018

Используя эту ссылку, я нашел ответ: 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>

Таким образом, для каждого поля будет скрытое свойство field.Index. И само текстовое поле будет иметь Имя, соответствующее значению скрытого поля и присоединенному к нему свойству.

Кажется, это работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...