2010-03-18 3 views
3

У меня есть уровень доступа к данным, уровень бизнес-логики и уровень представления (то есть сами страницы).ASP.NET манипулирует кнопкой click event перед OnPreInit

Я обрабатываю событие OnPreInit и заполняет коллекции, необходимые для страницы. Все данные поступают из базы данных SQL-сервера, и я не использую кеширование.

Я обрабатываю событие нажатия кнопки, чтобы получить значения из формы и вставить новый объект в базу данных. Проблема в том, что к тому времени, когда я обрабатываю событие click, коллекции уже заполнены, поэтому новый элемент, который был вставлен в базу данных, не был восстановлен.

Что такое принятое решение?

Я мог бы вставить новый объект непосредственно в коллекцию и повторно связать GridView, но SQL-запрос выбирает только набор объектов, и новый объект может выходить за пределы этого набора.

Спасибо!

ответ

2

Я вообще делать привязку данных в двух местах в моем страницы:

  1. Внутри Page_Load, if! IsPostBack для загрузки исходного состояния.

  2. Как одна из последних строк в обработчиках событий, чтобы показать результат добавления/редактирования/удаления записи.

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

+0

Объяснение Кори является наиболее полным. Ключевым моментом здесь является то, что вы не хотите перепечатывать свои данные в PostBack, если только это явно не требуется из-за действия пользователя (т. Е. Добавления нового элемента). Посмотрите на примеры Microsoft Databinding, например GridView. – Bryan

+0

Это замечательно, вместе с подсказкой от pmarflee я решил проблему. Благодаря! – Phillykins

1

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

0

Вы должны просто обработать событие click. Затем после обновления/вставки базы данных вы должны переделать свои данные. В зависимости от вашей реализации вам может потребоваться повторная публикация страницы. Если бы вы использовали обычную привязку данных, вы могли бы снова вызвать метод связывания.

+0

Я хочу, чтобы избежать еще туда и обратно в базу данных и, если это возможно веб-сервер, это кажется ненужным в этой ситуации. – Phillykins

+0

Если бизнес-логика находится в базе данных, вы должны спросить базу данных, что делать. Вы могли бы вернуть некоторую ценность из инструкции insert, которая сообщила вам, что делать, но это кажется хакерским. – Greg

0
  1. Извлечь данные на событие Page.LoadComplete и выполнить привязку данных.
  2. Если по какой-то причине, должны получить их только на PreInit, а затем получить их для! Условий IsPostBack и связать их и для условий Postback, обрабатывать их на LoadComplete
Смежные вопросы