MVC .NET模型即时绑定到数组

时间:2011-03-31 07:35:22

标签: asp.net-mvc razor

在Scotts博客post中,他描述了如何将一组对象发布到控制器。

我的问题如何最好地为此生成一个View,允许用户动态添加更多数组项?

如果我写

 foreach(MyModel item in Model)
 {
     <p>@Html.TextBoxFor(m => item.Name)</p>
 }

并让控制器在每次生成<input type="text" name="item.Name" />时都会向数组中添加一个新项目,而不是1数组索引。

如果我手动编写<input>代码,那么它可以正常工作但我丢失了所有客户端验证属性,例如data-val-required="Name is required"

我想要做的是让用户动态地向阵列中添加新项目并仍然保持不引人注目的验证?这是最好的做法是什么?

我在想我是用jQuery自己编写的,但如果是这样我可以继续验证吗?

更新 看起来像Tassadaque的答案是一个很好的.NET解决方案,但看起来像很多服务器端代码来做一些非常容易的事情。 Muhammad Adeel Zahi的答案还可以,但仍然错过了客户端验证。

我想我最终会手动编写自己的客户端HTML并使用jQuery live和validation插件。因此,我可以自己进行所有验证,并在不调用服务器的情况下添加和删除所有客户端的新项目。

2 个答案:

答案 0 :(得分:4)

您可能会看到This在此帖子史诗中验证了一个可变长度列表,其中可以动态添加或删除文本框

答案 1 :(得分:1)

当渲染和绑定到列表或数组时,我通常更喜欢循环遍历foreach循环,因为它将为模型绑定器生成所需的索引以将数据绑定到模型。

for(int i=0;i<Model.Count(); i++)
{
   <%:Html.TextBox("Items["+i+"].Name", Model[i].Name)%>
}

对于列表绑定而言,我对于强类型助手不太满意,但纯粹是个人偏好的问题。但是,如果您允许用户通过javascript动态添加和删除页面中的项目,则必须自己处理索引。

编辑:我有blogged关于使用jquery模板在asp.net mvc中创建主详细信息表格,这也与列表绑定方案相关