带有集合的Submittet对象缺少新的集合数据

时间:2011-11-15 11:57:24

标签: asp.net-mvc-3 collections razor foreach

我在从RandomNumbers List中获取新数据时遇到问题

我得到了这个简单的课程

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 个答案:

答案 0 :(得分:3)

您必须确保您的嵌套集合相应地在视图中呈现。

在视图中:

     <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" />

(为简洁而跳过验证)

答案 1 :(得分:2)

This article可以帮助您了解如何在表单中绑定集合