За последние несколько недель я много раз пытался заставить серверный вид MVC 2 работать с объектами с вложенными элементами IList без особого успеха. Мне не хватает фундаментального понимания, что, я надеюсь, этот вопрос разрешится.
То, что я хочу, это форма, которая показывает список продуктов, где вы можете изменить информацию в строке, включая иерархию (список продуктов, каждый из которых имеет список субпродуктов, каждый из которых имеет список изображений, и т. д.) Я пытаюсь воссоздать старую форму MS Access, в которой в большой форме есть список продуктов, а в подформах отображаются связанные продукты, все из которых позволяют выполнять оперативное редактирование. Access сохраняет каждую запись, сосредоточившись на другой записи.
Допустим, у вас есть модель домена, которая выглядит следующим образом:
public class Product {
... // Lots of fields like public string name {get; set;}
public IList<Department> departments {get; set;}
public IList<SubProduct> subProducts {get; set;}
}
public class SubProduct {
... // Lots of fields like public string name {get; set;}
public IList<Image> images {get; set;}
}
public class Image {
... // Lots of fields like public string name {get; set;}
}
И модель представления, которая выглядит следующим образом:
public class EditProduct {
IList<Product> products {get; set;}
}
В MVC 2 View, как бы вы закодировали поля Edit, чтобы можно было отправить единственную модель обратно в контроллер? Я знаком с
<input id="products[0].subProducts[0].images[0].name" /... >
механика, но каждый IList нуждается в способе CRUD-элементов на одном экране. Это большой экран ввода данных, где скорость имеет значение, равно как и возможность видеть все продукты в списке. Мне нужны кнопки «Добавить», «Удалить» и средства для публикации всей формы после редактирования любых входных данных.
Если я посмотрю на это с точки зрения JQuery:
- Я сериализую модель как JSON для начальной формы для первого N числа элементов IList
- Я загружаю на лету дополнительные продукты в том же списке, когда они достигают дна контейнера div
- Я принимаю всю модель при сохранении / публикации или принимаю фрагменты одинаковой формы для отдельных объектов, например, наличие отдельного тега html-формы для каждого элемента IList
Но по какой-то причине я просто не понимаю, как это сделать на стороне сервера. Любые ссылки или примеры кода для самого View будут великолепны. Элементы без IList, кажется, прекрасно работают, особенно с шаблонами пользовательского интерфейса. Буду ли я создавать несколько отдельных тегов HTML-форм вокруг каждой редактируемой сущности, и посты будут касаться только одного элемента за раз?