Ваша проблема довольно распространена и ее легко исправить, когда вы поймете, как она работает.
Прямо сейчас у вас есть модель представления, у которой есть свойство IEnumerable<T>
(не имеет значения, что является универсальным параметром). Вы пытаетесь передать элементы в представление и заполнить IEnumerable<T>
теми же значениями, когда ответ возвращается, используя значения, изначально записанные на страницу и дополненные выбранным элементом (по крайней мере, из кода, который вы опубликовали в любом случае, это поможет вам точно указать свое намерение в этом вопросе). Проблема, с которой вы столкнулись, заключается в том, что вы должны отправить эти значения на страницу так, чтобы они могли быть возвращены.
Позвольте мне сейчас сказать, что вы, вероятно, должны НЕ использовать эту технику. Как правило, гораздо лучше вернуть только выбор и снова сгенерировать список, если вам нужно на стороне сервера.
Судя по всему, вы хотите вернуть весь список, а затем найти выбранный элемент, который является точкой раскрывающегося списка или группы переключателей. Чтобы вернуть выбор обратно, параметр для вашего действия контроллера должен иметь свойства, которые соответствуют переменным, переданным обратно. В этом случае похоже, что вы используете имя параметра radiobutton
для всех ваших переключателей (то же самое Держите истину для выпадающего списка, только он использует имя списка). Какой бы из них ни был выбран, значение, связанное с ним, возвращается с этим именем. Среда MVC позаботится о том, чтобы попытаться найти соответствующее действие, в котором указано как можно больше имен.
То, что вам нужно использовать для параметра действия, - это новый класс, который содержит свойство для всех имен полей, отправляемых обратно на сервер! Или, конечно, вы можете просто добавить свойство radiobutton
к своему StructureViewModel
. Фактически, вы заметите, что он уже пытается установить это значение, только в настоящее время его нет в вашей модели представления. Однако вы по-прежнему не получите исходный список, но это нормально, потому что даже если вы получили исходный список обратно, у вас нет идентификатора, чтобы сообщить, какой элемент был выбран!
Надеюсь, это поможет вам понять, что происходит, если у вас есть еще вопросы, пожалуйста, задавайте.