【问题标题】:MVC .NET Model Binding to Array on the flyMVC .NET 模型动态绑定到数组
【发布时间】:2011-03-31 07:35:21
【问题描述】:

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

我的问题如何最好地为此生成一个视图以允许用户即时添加更多数组项?

如果我写

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

并让控制器在每次生成 &lt;input type="text" name="item.Name" /&gt; 缺少 1 数组索引时向数组添加一个新项。

如果我手动编写 &lt;input&gt; 代码,那么它可以工作,但我会丢失所有客户端验证属性,例如 data-val-required="Name is required"

我想要做的是让用户在运行中向数组添加新项目并且仍然保留不显眼的验证?这方面的最佳做法是什么?

我想我是用 jQuery 自己写的,但如果是这样,我可以保留验证吗?

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

我想我最终只会手动编写自己的客户端 HTML 并使用 jQuery live 和验证插件。因此,我可以在所有客户端都进行自己的验证以及添加和删除新项目,而无需对服务器进行任何调用。

【问题讨论】:

    标签: asp.net-mvc razor


    【解决方案1】:

    您可能会看到This 在这篇文章中史蒂夫验证了一个可变长度列表,其中可以动态添加或删除文本框

    【讨论】:

      【解决方案2】:

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

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

      当涉及到列表绑定时,我对强类型帮助器感到不舒服,但这纯粹是个人喜好问题。但是,如果您允许用户通过 JavaScript 从页面中动态添加和删除项目,则您必须自己处理索引。

      编辑

      我有 blogged 关于使用与列表绑定场景相关的 jQuery 模板在 asp.net mvc 中创建主详细信息表单。

      【讨论】:

      • 感谢这有助于生成输入,但它仍然没有将 data-val-required="Name is required" 属性放在表单上
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 2015-12-01
      相关资源
      最近更新 更多