具有IEnumerable属性的ASP.NET MVC ViewModel

时间:2014-06-17 03:48:40

标签: model-binding asp.net-mvc-viewmodel

我正在尝试

我正在尝试将我的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中列表的可能性。当我实现他的解决方案时,联系人列表中发送回控制器的发布数据为空。

请随时提出任何问题以澄清并感谢您的时间。

0 个答案:

没有答案