#asp.net-mvc-3 #viewmodel #editorfor
#asp.net-mvc-3 #viewmodel #редактор для
Вопрос:
Моя ViewModel обладает свойством, представляющим собой коллекцию других объектов моей модели, в данном случае CategoryTags (и у каждого тега есть тег и идентификатор).
1) Правильно ли я понимаю, что Html.EditorFor () не имеет пользовательского интерфейса, который он может создать для ICollection?
2) Предполагая # 1, я решил создать EditorTemplate, представляющий собой текстовое поле, в котором мой пользователь может вводить имена тегов, разделенных запятыми, и jquery автоматически завершится. Должен ли я передать обратно список имен тегов (или их соответствующие идентификаторы), а затем проанализировать их обратно в категорию тегов, указанную в POST?
Спасибо!
Ответ №1:
- Исправьте — вам нужен ваш собственный шаблон (см.http://jarrettmeyer.com/post/2995732471/nested-collection-models-in-asp-net-mvc-3 )
- Да, это может сработать — связующее звено модели будет заполнено правильно, если им присвоен правильный идентификатор вещи [0] и т.д. Смотрите статью Фила Хаака об этом:http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx
Редактировать для # 2 — Я прочитал ваш оригинальный пост немного неправильно. Если вы поместите их все в одно текстовое поле, то вам нужно будет проанализировать их (или создать свой собственный model binder). У вас мог бы быть редактор, который добавляет новые текстовые поля в DOM для каждого элемента, а затем model binder корректно повторно заполнит список. Однако в случае, о котором вы упомянули, ваши варианты — вручную сделать это на сервере или использовать свой собственный model binder (что здесь было бы довольно просто), чтобы разбить их на модели. Либо или : )
Комментарии:
1. Спасибо, Адам. Похоже, что метод, который вы описали, добавление нового tb в DOM для каждого выбранного элемента, является «правильным» способом сделать это. Возможно, я скопирую метод stackoverflow, где теги накапливаются под полем ввода
2. Добавление: Тот пост от Джарретмейера, на который вы ссылались, действительно великолепен.
3. К вашему сведению, эта первая ссылка не работает. Вот кэш Google: webcache.googleusercontent.com /…
4. Первая ссылка (на jarrettmeyer.com ) работает сегодня, и это стоит прочитать и 1 к этому ответу.