Сведения о вопросе

SOON

13:40, 3rd August, 2020

Теги

c#   asp.net    

Форма post не содержит textbox данных [ASP.NET C#]

Просмотров: 400   Ответов: 5

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

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

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

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



  Сведения об ответе

VERSUION

14:42, 13th August, 2020

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


  Сведения об ответе

PAGE

01:46, 1st August, 2020

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

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


  Сведения об ответе

qwerty101

05:17, 1st August, 2020

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

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

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


  Сведения об ответе

+-*/

20:58, 18th August, 2020

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

  • PreInit
  • В этом
  • Загрузка
  • Ваш Обработчик Событий Управления

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

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


  Сведения об ответе

COOL

03:54, 16th August, 2020

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

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться