我在从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};
    }
}


在我的控制器中,我创建了两个ActionResult,一个用于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"/>
}






页面看起来像这样。
现在,当我单击“保存”按钮时,将调用[HttpPost]测试,但是包含的测试对象仅包含新名称,不包含RandomNumber列表中的所有更改。我做错了什么?

最佳答案

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

在视图中:

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

(为简便起见,跳过验证)

08-06 09:38