MVC中模型中的模型列表

时间:2012-09-05 15:36:17

标签: c# asp.net-mvc asp.net-mvc-2

我有两种模式:

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项目。 我可以在日志中看到数据发送正确。

我尝试了一切,没有任何作用。

3 个答案:

答案 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)

@Dai是对的。当它是List的实例时,MVC允许我使用项目作为模型实例名称,但不允许我将它用于ModelOut。

items重命名为model后,工作正常。

相关问题