我有一个模特
public class DataModel
{
public List<GeneratorReportModel> myGenerators{ get; set; }
}
视图为
@using (Html.BeginForm("Index", "DataEntry", FormMethod.Post))
{
for (int i = 0; i < 15; i++)
{
@Html.TextBoxFor(m => m.myGenerators.ElementAt(i).my_field)
<br />
}
}
和控制器捕获表格POST
public ActionResult Index(DataModel dataModel)
{
return Content("ADDED>MYfieild>" dataModel.myGenerators.ElementAt(0).my_field);
}
当为上面的视图生成HTML时,所有文本框都具有相同的“名称”属性,并且在表单发布时从ActionResult获取的值始终不正确。 怎么做?
答案 0 :(得分:0)
需要更多信息,请尝试以下伪代码:
@using (Html.BeginForm("Index", "DataEntry", FormMethod.Post))
{
for (int i = 0; i < 15; i++)
{
<input type="text" name="my_field@i" value="@Model.myGenerators.ElementAt(i).my_field">
<br />
}
}
答案 1 :(得分:0)
在您看来,如果您改用列表中的索引器,则ModelBinder将选择它们并正确命名:
@using (Html.BeginForm("Index", "DataEntry", FormMethod.Post))
{
for (int i = 0; i < 15; i++)
{
@Html.TextBoxFor(m => m.myGenerators[i].my_field)
<br />
}
}
这样,输出将更像:
<input type='textbox' name='myGenerators[0].my_field'/>
<input type='textbox' name='myGenerators[1].my_field'/>
然后,在控制器上使用的ModelBinder可以将其解释为IEnumerable<T>
,您将看到您的集合已初始化。