В моей модели у меня есть объект Product, у меня есть объект Author, и они имеют отношение многие ко многим, поэтому у меня также есть объект ProductAuthor.
С функциональной точки зрения мне нужно текстовое поле в моем представлении, где пользователь может ввести имя автора, я буду искать его (используя Ajax) и отображать несколько результатов внизу, а затем пользователь может щелкнуть, чтобы добавить одно (или несколько), и выбранные из них отображаются рядом с этим окном поиска. Затем, когда я нажимаю Сохранить в моей форме, все сохраняется (в контроллере), а не раньше (поэтому нет асинхронного метода AddAuthor).
Кроме того, если я загружаю Продукт для редактирования, и к нему уже прикреплены авторы, я хочу, чтобы они отображались, и пользователь должен иметь возможность отменить их выбор (поэтому, когда он нажимает сохранить, они больше не будут подключены).
Как мне представить его в представлении? Это нормально, если мне нужно написать цикл foreach на дисплее, но при отправке, как они будут отправлены? Сгенерировал ли я скрытые поля для каждого выбранного автора? Если да, то как их назвать, чтобы я мог получить к ним доступ в контроллере? Могут ли они быть каким-либо образом сериализованы в типизированные сущности, или мне придется искать их в FormCollection?
Бонус, если я могу использовать ту же вещь с очень небольшим изменением для отношения один-ко-многим (когда статья может иметь только одного автора, но я не хочу использовать выпадающий список для этого, так как может быть многих авторов, и поиск по ним не будет возможен, и если я напишу асинхронный FindAuthor для сценария «многие ко многим», я бы также хотел использовать его в сценарии «один ко многим».