#asp.net #asp.net-mvc #asp.net-mvc-3
#asp.net #asp.net-mvc #asp.net-mvc-3
Вопрос:
У меня очень странная проблема. Я хочу изменить выбранное значение выпадающего списка после отправки формы. Я знаю, что HtmlHelper извлекает значение ModelState, которое заполнено опубликованными данными. Но у меня есть перенаправление с моего действия POST на GET action! Однако мой ddl заполнен значением, отправленным во время публикации. Я также добавил этот код в свое действие post: ModelState.Очистить (), но это мне тоже не помогло.
Я добавил еще один ddl в свою форму только для отладки;
@Html.DropDownList("asd" Guid.NewGuid(), Model.Voting.Result.ToSelectList())
Он всегда отображается со значением, предоставленным серверным кодом. Но целевой ddl
@Html.DropDownListFor(x => x.Voting.Result, Model.Voting.Result.ToSelectList())
всегда имеет значение, опубликованное пользователем.
Как я могу заполнить целевой ddl?
Комментарии:
1. Если ModelState. Clear() вызывается перед перенаправлением на ваше представление «get», и это не помогло, тогда вам следует дважды проверить свой код, поскольку это просто работает.
2. Я вижу и проверил свой код. Но @Html.DropDownList(«asd» Guid. NewGuid(), модель. Голосование. Результат. ToSelectList()) работает нормально. Таким образом, проблема может заключаться в методе @Html.DropDownListFor
Ответ №1:
Вы должны передать ему начальное значение следующим образом
@Html.DropDownListFor(x => x.Voting.Result,
new SelectList(Model.Voting.Result, "Id", "Name", /*initial value*/))
Используйте этот конструктор класса SelectList
Редактировать изначально я ввел аргумент в неправильный метод
Комментарии:
1. Третьим параметром является ‘object htmlAttributes’ или ‘string optionLabel’. Я пытался передать значение в качестве третьего параметра, и это мне не помогло.
2. преобразуйте его в строку msdn.microsoft.com/en-us/library/dd504970 (v= VS.98).aspx
3. внесение этого изменения добавило еще один элемент в результирующий элемент <select>. Этот элемент выбран. Таким образом, один элемент дублируется в результирующем ddl 🙁
4. Я действительно использую этот конструктор с указанным третьим аргументом.