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个属性。目的是允许用户在一次采集中输入一组这些数据。
假设这是可能的,任何人都可以帮助我的语法?我无法弄清楚如何标记表单元素以使绑定工作。
答
明确的答案就在这里: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按钮,并且你必须增加每个附加控件的索引。这并不难,但我只是想警告你注意它实际产生的来源。
+1取消downvote .. – Ahmad 2010-09-24 06:17:03