измените значение выпадающего списка после отправки формы ASP.NET MVC

#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. Я действительно использую этот конструктор с указанным третьим аргументом.