Сообщение формы не содержит текстовых данных [ASP.NET C #] - PullRequest
5 голосов
/ 22 августа 2008

У меня есть несколько элементов управления «ASP: TextBox» на форме (около 20).
Когда форма загружается, текстовые поля заполняются из базы данных.
Пользователь может изменить заполненные значения, и когда они отправляют форму, я беру значения, отправленные на сервер, и условно сохраняю их (определяется некоторой бизнес-логикой).
Все текстовые поля, кроме 1, работают по назначению.

Нечетное поле после обратной передачи не содержит обновленное значение, введенное пользователем в поле.
При отладке приложения ясно, что myTextBox.Text отражает старое, предварительно заполненное значение, а не новое, предоставленное пользователем значение.
Каждое другое поле правильно отображает их соответствующие пользовательские значения.

Я нашел обходной путь.
Мое решение состояло в том, чтобы в основном извлечь значение текстового поля из объекта Request.Form: Request.Form[myTextBox.UniqueID], который содержит предоставленное пользователем значение.

Что здесь может происходить?
Как я уже упоминал, другие текстовые поля прекрасно воспринимают предоставленные пользователем значения, и с этим конкретным проблемным текстовым полем не связано никакой логики - оно просто берет значение и сохраняет его.
Основное различие между этим текстовым полем и остальным заключается в том, что это многострочное поле (для ввода заметок), которое, как мне кажется, отображается как HTML-тег «textarea» вместо тега «input» в ASP.NET.

Ответы [ 5 ]

8 голосов
/ 22 августа 2008

Вы изначально загружаете данные только тогда, когда! Page.IsPostBack? Также включено ли состояние просмотра для текстового поля?

6 голосов
/ 22 августа 2008

это происходит со мной все время.

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        // populate text boxes from database
    }
}
2 голосов
/ 22 августа 2008

Я бы второй Ответ Джонатана Я бы проверил ваши настройки привязки данных.

Если вам не нужен ViewState для текстовых полей (т. Е. Обратная передача не происходит до отправки формы), вы должны отключить его.

Похоже, у вас нет проблем с сохранением данных (поскольку вы сказали, что вам удалось получить элемент управления для считывания правильных данных обратно). Поэтому я бы сказал, что проблема загружается в ваш код привязки данных.

1 голос
/ 26 августа 2008

Вы изначально загружаете данные только тогда, когда! Page.IsPostBack? Также включено ли состояние просмотра для текстового поля?

Я почти забыл проверить ViewState, но в итоге не забыл проверить, что он не был отключен, прежде чем делать мой пост здесь на SO. Я даже установил EnableViewState = "true", чтобы убедиться.

Я нашел решение, и оно совпало с большинством ответов здесь. Форма действительно загружала свои данные более одного раза (что является преднамеренным поведением). Я реализовал специальный код для этого поля, и все хорошо.

Спасибо за ваши ответы, все!

1 голос
/ 22 августа 2008

Запомните порядок жизненного цикла страницы и место привязки вашей формы к данным.

  • PreInit
  • Init
  • Load
  • Ваш обработчик событий управления

Если вы читаете значение в обработчике управляющих событий, но привязываете данные в Init или Load, у вас будет старое значение.

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

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