我正在尝试
我正在尝试将我的ViewModel绑定到我的View,其中包含一个客户名称和一个联系人列表以联系该客户。填充视图后,我还希望用户能够在视图中添加,删除和编辑联系人。
到目前为止我得到了什么
目前我可以使用EditorTemplate绑定到ViewModel并编辑数据而没有任何问题。当我想在列表中添加或删除行时,如果用户从ViewModel绑定的可编辑列表中间删除第5行,则只有第1 - 4行最终会被发布到服务器。
守则
以下是我的ViewModel的样子:
public class CustomerViewModel{
[Required]
public int CustomerUniqueID { get; set; }
[Required]
public string Name { get; set; }
public IEnumerable<CustomerContacts> Contacts { get; set; }
public CustomerViewModel() { }
public CustomerViewModel(Customer customer)
{
ICustomerContactRepository contacts = new LockShop.Domain.Concrete.EFCustomerContactRepository();
this.Contacts = contacts.FindContacts(customer.UniqueID);
this.Name = customer.Name;
}
}
我将我的ViewModel传递给我的视图:
public ActionResult Edit(){
Customer customer = repository.Customers.FirstOrDefault(c => c.UniqueID == 23128);
return View(new CustomerViewModel(customer));
}
当需要渲染列表时,我只需使用EditorFor帮助器:
@Html.EditorFor(model => model.Contacts)
我喜欢这种方法的是,当我点击保存按钮时,我的所有更改都会自动发布到控制器!
我的问题
如何将添加和删除行的功能添加到由我的ViewModel中的IEnumerable生成的列表中的最佳做法是什么?
我尝试过什么
我已经阅读了Steven Sanderson的博客文章,其中讨论了ASP.NET MVC中的editing a variable length list。他的帖子似乎只涵盖了对模型的绑定,并没有涵盖绑定到ViewModel中列表的可能性。当我实现他的解决方案时,联系人列表中发送回控制器的发布数据为空。
请随时提出任何问题以澄清并感谢您的时间。