Сообщение формы не содержит данных текстового поля [ASP.NET C#]

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

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

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

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


person Darren Steinweg    schedule 22.08.2008    source источник


Ответы (5)


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

person Darren Kopp    schedule 22.08.2008

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

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        // populate text boxes from database
    }
}
person Jon Erickson    schedule 22.08.2008

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

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

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

person Rob Cooper    schedule 22.08.2008

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

  • PreInit
  • В этом
  • Нагрузка
  • Ваш обработчик управляющих событий

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

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

person FlySwat    schedule 22.08.2008

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

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

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

Всем спасибо за ответы!

person Darren Steinweg    schedule 26.08.2008