Если вы не хотите перенаправлять на ту же страницу после обратной передачи (после Post- Шаблон Redirect-Get, который действительно может значительно очистить страницы ASP.NET!), вам лучше всего:
1) После того, как вы сохраните элемент в базе данных, извлеките DataSource
вашего ListBox
и снова вызовите ListBox.DataBind()
при обратной передаче. (Кроме того, необходимость добавления всего этого дополнительного кода для извлечения данных и связывания является одной из нескольких причин, по которым люди переходят на шаблон PRG при работе с ASP.NET.)
2) Измените класс отделенного кода, чтобы он добавлял элемент списка в соответствующий WebControl при отправке на страницу.
То есть, когда вы сохраняете новое значение в базе данных, добавьте новый ListItem
в свой элемент управления ListBox
:
protected void Save_Click(object sender, EventArgs e) {
// ... Code to save the new value to your database ...
ListItem newItem = new ListItem(text, value);
ListBox.Items.Add(listItem);
}
Теперь значение будет там, когда ASP.NET отобразит ваш HTML.
Изменить: добавлено больше деталей, чтобы попытаться объяснить, почему нет лучшего решения.
Когда вы добавляете элементы <option>
в элемент управления <select>
на клиенте, эти новые элементы option
не передаются серверу — для этого просто нет никакого механизма.
Это может сбивать с толку, потому что, как вы видели, вы все еще можете публиковать динамически добавленные значения option
на сервер (но только если вы отключите EnableEventValidation
, что рискованно, как указал womp в комментариях).
Однако не выбранные элементы option не передаются веб-серверам во время почтовых запросов.
Тогда возникает вопрос, как ASP.NET может восстановить правильное содержимое ListBox после почтового запроса? Во-первых, он делает все, что говорит ему программный код (ListBox.DataBind, ListBox.Items.Add и т. д.). Во-вторых, если состояние просмотра включено, оно добавляет все значения параметров, которые были сохранены в состояние просмотра.
ASP.NET, вероятно, мог бы добавить третье правило: «если отправленное значение для списка выбора еще не находится в ListBox, добавьте это значение в ListBox». Но поскольку размещение произвольных значений на странице представляет собой угрозу безопасности (по крайней мере, когда вы установили набор ожидаемых значений, как в случае с ListBox), Microsoft отказалась от этого. (Кроме того, подумайте, что бы вы сделали с динамически добавленными значениями ListBox, которые не прошли проверку — должны ли они быть добавлены при перестроении ListBox или нет?)
person
Community
schedule
10.07.2009