Невозможно изменить значение текстового поля в ASP.NET MVC 3 - PullRequest
1 голос
/ 10 октября 2011

У меня проблема с изменением значения текстового поля в MVC 3.

У меня есть простое представление, которое возвращается контроллером и типизировано для пользовательской модели представления. В представлении есть текстовое поле, которое привязано к строковому свойству в модели представления. Если я заполняю эту строку при начальной загрузке, тогда значение текстового поля содержит значение строки. Однако если я затем отправлю форму обратно на тот же URL-адрес, изменит значение строки модели представления и перезагрузлю представление, тогда текстовое поле содержит значение, которое было отправлено обратно, а не значение, которое контроллер предоставил для модели представления. *

Я создал простой тестовый проект, чтобы воссоздать проблему самым простым способом.

Просмотр модели:
http://www.codetunnel.com/content/images/textboxproblem/ViewModel.jpg

Контроллер:
http://www.codetunnel.com/content/images/textboxproblem/Controller.jpg

Вид:
http://www.codetunnel.com/content/images/textboxproblem/View.jpg

В представлении я отображаю строковое значение модели представления, а также привязываю свойство строки к текстовому полю.

При начальной загрузке все выглядит нормально:
http://www.codetunnel.com/content/images/textboxproblem/InitialLoadTest.jpg

Однако, если я изменю значение текстового поля, а затем нажму клавишу ввода, чтобы POST, форма не произойдет, как я ожидал. Отображаемое значение - это значение, установленное контроллером в методе действия, но в текстовом поле сохраняется значение, которое было отправлено обратно:

http://www.codetunnel.com/content/images/textboxproblem/POSTTest.jpg

Я не уверен, в чем проблема.

Ответы [ 2 ]

1 голос
/ 10 октября 2011

Это (к сожалению) правильное поведение. При использовании TextBoxFor или других связанных с данными элементов созданный элемент сначала привязывается к существующему ModelState, а затем к модели.

Решение состоит в том, чтобы очистить ModelState в вашем действии [HttpPost], чтобы элементы в представлении, возвращенном действием POST, были привязаны к модели. В вашем действии POST добавьте следующее:

ModelState.Clear();

Лично я думаю, что дизайн неправильный, но очистка ModelState даст вам поведение, которое вы ожидали.

0 голосов
/ 10 октября 2011

Это ожидаемое поведение приложения MVC.

Когда вы делаете сообщение, оно сохраняет значение в ModelState, и помощники HTML используют это значение вместо Model значения.

Вы можете написать свой собственный помощник по html или использовать стандартный html <input/>, чтобы обойти это, если необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...