我正在尝试将动态复杂模型传递给我的控制器,而不使用和编辑器视图模板。添加项目后,我的标记最终如下所示。
<ul>
<li class="invItem">
<input type="hidden" value="Bed California King" name="[0].efInvItem">
<input type="hidden" value="4" name="[0].efRoomID"><span class="ui-icon ui-icon-circle-close removeItem"></span>Bed California King
</li>
<li class="invItem"><input type="hidden" value="Coffee Table Medium" name="[1].efInvItem">
<input type="hidden" value="4" name="[1].efRoomID"><span class="ui-icon ui-icon-circle-close removeItem"></span>Coffee Table Medium
</li>
<li>
<a href="#" class="addItem">Add inventory item to this room</a>
</li>
</ul>
我正在使用 javascript,而不是编辑器视图模板来创建列表。将项目添加到此列表时,我正在重命名所有输入元素,以便我拥有输入项目的有序列表。
然后我通过以下方式接收控制器中的表单项
[HttpGet]
public ActionResult SendEstimate(ICollection<EstimateFormInventory> intentoryItems)
阅读这篇文章后按照建议的程序进行操作
http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx
然后通过将项目保存到数据库
db.EstimateFormInventory.Add(estimateFormInventory);
db.SaveChanges();
但是,当发布到数据库时,ICollection 没有被迭代,并且我正在使用空值创建 1 行。
我的模型如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace OCMovers.Models
{
public class EstimateFormInventory
{
[Key]
public int efiID { get; set; }
public virtual Room efRoomID { get; set; }
public string efiInvItem { get; set; }
}
}
我肯定错过了一些东西,任何建议都会很棒。
谢谢!