Submittet Объект с коллекцией отсутствует новая коллекция данных - PullRequest
3 голосов
/ 15 ноября 2011

У меня проблемы с получением новых данных из списка RandomNumbers

Я получил этот простой класс

public class Test
{
    public string Name { get; set; }
    public List<int> RandomNumbers { get; set; }

    public Test()
    {
        RandomNumbers = new List<int>(){0,0,0,0,0};
    }
}

В моем контроллере я создал два ActionResults, один для Get и один для Post

public ActionResult Test()
{
    var test = new Test();
    return View(test);
}

[HttpPost]
public ActionResult Test(Test test)
{
    return View();
}

И, наконец, вид

@model Test
@{
    ViewBag.Title = "Test";
    Layout = null;
}

<h2>Test</h2>
@using (Html.BeginForm())
{
    @Html.LabelFor(model => model.Name)
    @Html.EditorFor(model => model.Name)
    <ul>@foreach (var t in Model.RandomNumbers)
        {
            <li> 
                @Html.LabelFor(model => t)
                @Html.EditorFor(model => t)
            </li>
        }
    </ul>
    <input type="submit" value="Save"/>
}

enter image description here

enter image description here

Страница выглядит следующим образом. Теперь, когда я нажимаю кнопку «Сохранить», вызывается тест [HttpPost], но включенный тестовый объект содержит только новое имя, и никакие изменения из списка RandomNumber не включены. Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 15 ноября 2011

Вы должны убедиться, что ваша вложенная коллекция отображается в представлении соответствующим образом.

По виду:

     <ul>@for (int i = 0; i < Model.RandomNumbers.Count; i++)
     {
            <li> 
                @Html.LabelFor(m => m.RandomNumbers[i])
                @Html.TextBoxFor(m => m.RandomNumbers[i])
            </li>
     }
     </ul>

Это создаст индексированные поля ввода, такие как

<input id="RandomNumbers_3_" name="RandomNumbers[3]" type="text" value="0" />

(пропущена проверка для краткости)

2 голосов
/ 15 ноября 2011

Эта статья должна помочь вам связать коллекцию в вашей форме

...