ASP.NET MVC - 使用IEnumerable模型插入或更新视图

问题描述:

我已经看到很多示例(NerdDinner,Sanderson的体育商店等),其中一个视图绑定到一组对象。视图中的语法通常是这样的......ASP.NET MVC - 使用IEnumerable模型插入或更新视图

<%@ Page... Inherits="System.Web.Mvc.ViewPage<IEnumerable<MyViewModel>>" %> 
... 
<% foreach (var myViewModel in Model) { %> 

我也看到了大量的插入或更新,其中控制器自动绑定模型参数,在视图中的表单元素的例子。

我正在寻找两种技术的组合,其中我的视图具有与myViewModel集合有关的表单元素,其中每个myViewModel都有3-4个属性。目的是允许用户在一次采集中输入一组这些数据。

假设这是可能的,任何人都可以帮助我的语法?我无法弄清楚如何标记表单元素以使绑定工作。

+0

+1取消downvote .. – Ahmad 2010-09-24 06:17:03

明确的答案就在这里:http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

您需要命名每个字段就好像它是一个数组的一部分:“属性名[我]”

这可能是通过内置的模型绑定,但是你必须对表单对象进行一些基于约定的命名。首先,你的行动需要采取一个集合:

[HttpPost] 
public ActionResult CreateFoos(List<Foo> foos) 
{ 
    // I have a list of the foo objects that were posted 
} 

,然后在视图中,假设你想为每个对象的一种形式:

<% for (int i = 0; i < Model.Count; i++) { %> 
    <%: Html.TextBoxFor(x => x[i].Property1) %> 
    <%: Html.TextBoxFor(x => x[i].Property2) %> 
    <%: Html.TextBoxFor(x => x[i].Property3) %> 
<% } %> 

,请注意控制如何呈现在HTML中,因为在你的“创建”视图中,你可能想要一个允许用户添加另一条记录的JavaScript按钮,并且你必须增加每个附加控件的索引。这并不难,但我只是想警告你注意它实际产生的来源。