我有两种模式:
class ModelIn{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
}
class ModelOut{
public ModelOut(){ People = new List<ModelIn>();}
public List<ModelIn> People { get; private set;}
public string Country { get; set; }
}
我有Controller编辑ModelOut:
public ActionResult People()
{
...
return View(SomeModelOutInstanceWith3People);
}
[HttpPost]
public ActionResult(ModelOut items)
{
...
}
在视图中我有点像:
<% using (Html.BeginForm()) { %>
<%: Html.EditorFor(m => Model.Country) %>
<% for(int i = 0; i < Model.People.Count; ++i){ %>
<%: Html.EditorFor(m => Model.People[i].FirstName) %>
<%: Html.EditorFor(m => Model.People[i].LastName) %>
<%: Html.EditorFor(m => Model.People[i].Address) %>
<% } %>
<input type="submit" />
<% } %>
一切正常,但在后期操作中我有空的ModelOut项目。 我可以在日志中看到数据发送正确。
我尝试了一切,没有任何作用。
答案 0 :(得分:1)
您是否尝试过<%: Html.EditorFor(m => m.People) %>
?
MVC应该自己遍历列表。
另外,请注意如何指定lambdas,它应该是m => m
而不是m => Model
。
PS。我使用MVC3 ......
答案 1 :(得分:0)
你的问题的原因可能是命名不匹配...我记得默认的模型绑定器由于这种命名不匹配而无法正常工作....这意味着你需要为模型指定更多信息binder更好地完成它的工作...尝试更新你的View代码,为每个属性使用下面的代码...
<%= Html.EditorFor(string.Format("People[{0}].FirstName", i), Model.People[i].FirstName) %>
上面的视图代码将生成以下标记
<input id="People_0__FirstName" name="People[0].FirstName" type="text" />
我上面可能有一个语法问题,但我想你可以在Visual Studio的帮助下做到正确
答案 2 :(得分:0)
将items
重命名为model
后,工作正常。