У меня есть несколько элементов управления "ASP: TextBox" в форме (около 20) .
Когда форма загружается, текстовые поля заполняются из базы данных.
Пользователь может изменить заполненные значения, и когда они отправят форму, я беру значения, отправленные на сервер, и условно сохраняю их (определяется некоторой бизнес-логикой) .
Все текстовые поля, кроме одного, работают должным образом.
Нечетное поле, полученное после обратной передачи, не содержит обновленного значения, которое пользователь ввел в поле.
При отладке приложения ясно, что myTextBox.Text отражает старое, предварительно заполненное значение, а не новое значение, введенное пользователем.
В каждом другом поле правильно отображаются соответствующие значения, введенные пользователем.
Я нашел обходной путь.
Мое решение заключалось в том, чтобы в основном извлечь значение текстового поля из объекта Request.Form: Request.Form[myTextBox.UniqueID], который действительно содержит значение, заданное пользователем.
Что здесь может происходить? Как я уже упоминал, другие текстовые поля прекрасно принимают значения, предоставленные пользователем, и это конкретное проблемное текстовое поле не имеет связанной с ним какой-либо логики - оно просто принимает значение и сохраняет его. Основное различие между этим текстовым полем и другими заключается в том, что это многострочное поле (для ввода заметок), которое, как я полагаю, отображается как тег «textarea» HTML вместо тега «input» в ASP.NET.





Вы изначально загружаете данные только когда! Page.IsPostBack? Кроме того, включено ли состояние просмотра для текстового поля?
Помните порядок жизненного цикла страницы и место привязки формы.
Если вы читаете значение в обработчике событий управления, но при этом связываетесь с данными в Init или Load, у вас будет старое значение.
Хитрость заключается в том, чтобы всегда связывать данные в правильном событии или проверять обратную передачу и затем не связывать данные.
Я бы второй Ответ Джонатана проверил бы ваши настройки привязки данных.
Если вам не нужен ViewState для текстовых полей (т.е. обратная передача не выполняется до отправки формы), вам следует отключить его.
Похоже, у вас нет проблем с сохранением данных (поскольку вы сказали, что вам удалось заставить элемент управления читать данные правильный обратно). Поэтому я бы сказал, что проблема загружается в ваш код привязки данных.
это происходит со мной все время.
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
// populate text boxes from database
}
}
Are you initially loading the data only when !Page.IsPostBack? Also, is view state enabled for the text box?
Я почти забыл проверить ViewState, но в конце концов не забыл убедиться, что он не отключен, прежде чем размещать свой пост здесь, на SO. Я даже установил EnableViewState = "true", чтобы убедиться.
Я нашел решение, и оно совпало с большинством ответов здесь. Форма действительно загружала свои данные более одного раза (что является преднамеренным поведением). Я реализовал специальный код для этого поля, и все хорошо.
Всем спасибо за ответы!