ASP.NET MVC ViewModel со свойством IEnumerable

#model-binding #asp.net-mvc-viewmodel

#привязка модели #asp.net-mvc-viewmodel

Вопрос:

Что я пытаюсь

Я пытаюсь привязать свою ViewModel к моему представлению, которое содержит имя клиента и список контактов для связи с этим клиентом. После заполнения представления я также хочу, чтобы у пользователя была возможность добавлять, удалять и редактировать контакты в представлении.

Что у меня есть до сих пор

В настоящее время я могу привязываться к ViewModel с помощью EditorTemplate и редактировать данные без проблем. Проблема возникает, когда я хочу добавить или удалить строки в списке, если пользователь удаляет строку 5 из середины редактируемого списка, связанного с ViewModel, на сервер будут отправлены только строки 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)
  

Что мне нравится в этом подходе, так это то, что когда я нажимаю кнопку сохранения, все мои изменения автоматически отправляются в контроллер!

Мой вопрос

Каковы наилучшие способы добавления функциональности добавления и удаления строк в список, который генерируется IEnumerable из моей ViewModel?

Что я пробовал

Я прочитал сообщение в блоге Стивена Сандерсона, в котором говорится о редактировании списка переменной длины в ASP.NET MVC. Его сообщение, похоже, касается только привязки к модели и не распространяется на возможность привязки к списку в ViewModel. Когда я реализовал его решение, данные post из списка контактов, которые были отправлены обратно на контроллер, были равны нулю.

Пожалуйста, не стесняйтесь задавать любые вопросы для уточнения и спасибо за ваше время.