6

我有两个模型:

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; }
}

我有控制器编辑 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 项目。我可以在日志中看到数据已正确发送。

我已经尝试了一切,没有任何效果。

4

3 回答 3

1

你试过简单<%: Html.EditorFor(m => m.People) %>吗?

MVC 应该自己循环遍历列表。

另外,注意你如何指定你的 lambda,它应该是m => m而不是m => Model.

PS。我使用MVC3 ...

于 2012-09-06T06:22:33.347 回答
0

您的问题的原因可能是命名不匹配......据我所知,默认模型绑定器由于命名不匹配而无法正常工作......这意味着您需要为模型绑定器指定更多信息才能执行它的工作更好...尝试更新您的查看代码以对每个属性使用以下代码...

<%= 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 的帮助下解决它

于 2012-09-05T16:10:27.483 回答
0

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

重命名itemsmodel它工作正常。

于 2012-09-10T06:55:48.730 回答