2009-05-31 2 views
2

Я понимаю, что такие поля, как Html.TextBox(), принимают два значения, первое из которых является именем, а второе - значением. И Html.TextArea(). Но в случае, когда форма представляется как AJAX, а div, где размещена форма, заменяется видом с сервера, поля формы настаивают на принятии предыдущих значений. Изображение стоит тысячи слов:Где поля формы в ASP.Net MVC принимают свои значения?

image http://img132.imageshack.us/img132/4171/aspnetmvcbug.png

Я проверил все на контроллере и модели, и изображение от отладки самого представления. Модель пуста, но поля, созданные из нее, принимают значение предыдущего представления.

ответ

3

Данные обратной передачи хранятся в ModelState. Встроенные методы HtmlHelper будут искать значения, хранящиеся в состоянии модели, на основе имени элемента формы при рендеринге их содержимого.

+0

О! Таким образом, состояние модели чиста, когда не используется AJAX, потому что я перенаправляю. Добавление ModelState.Clear(), когда метод успешно зафиксировал его. Это способ пойти или я уничтожаю ModelState? – Pablo

+0

Я уверен, что ModelState.Clear() в порядке - я использую его в нескольких местах в своем коде. Он очистит все сообщения валидации от ModelState, а также значения формы перед отправкой, но пока вы осознаете, что я думаю, что на самом деле нет проблем с его использованием. –

0

У вас есть запись ViewData ["Body"]? MVC также попытается связать элемент управления с элементом ViewData на основе имени.

+0

В ViewData отсутствует тело. Благодарю. – Pablo

2

Проверьте свойство View.ModelState. Формы могут захватывать ценности оттуда в определенных обстоятельствах.

+1

Да, проблема была в ModelState. Выполнение задачи ModelState.Clean(), похоже, устраняет проблему, но я не уверен, что я уничтожаю ModelState в этом процессе. – Pablo