2010-01-03 3 views
0

У меня есть .aspx и в нем .ascx. В .ascx у меня есть серверный контроль.Обновление страницы и привязка не работают

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

как список предметов в корзине, так и список перекрестных предметов продажи управляются ретранслятором и связаны с загрузкой страницы. Поэтому .aspx вызывает метод, который перегружает элементы корзины при загрузке страницы. И .ascx вызывает метод в своей загрузке страницы, который перегружает элементы перекрестной продажи в этом настраиваемом элементе управления (.cs), который находится в моем .ascx.

Проблема заключается в том, что когда пользователь нажимает кнопку «добавить в корзину» в ретрансляторе внутри моего настраиваемого элемента управления, страница обновляется, и что должно произойти, это элементы корзины в .aspx И список перекрестных продаж должен refrsh показать, что элемент перекрестного продавливания был перемещен в корзину. Но даже несмотря на то, что когда я отлаживаю, и я вижу, что список отскакивает от корвета # элементов после перемещения, страница все еще показывает старое состояние. Я должен обновить страницу вручную, чтобы заставить ее работать.

Наверное, мне нужно проверить страницу.IsPostback? но даже если я не проверю, что ... по крайней мере, оба списка должны быть освежающими, независимо от того, что у меня есть это на моей загрузке страницы. Поэтому, даже если это postback, и я не проверяю, что списки должны показывать новое состояние, потому что я даже не проверяю обратную передачу. Поэтому проверка на postaback я не думаю, что это проблема, потому что я хочу, чтобы списки перегруппировались и повторно обновлялись на любой загрузке страницы. Первоначальная или если это обратная передача ... это не имеет значения. Перезагрузите каждый раз. Но это, похоже, не делает этого, хотя я отчетливо вижу вербальность списков, имеющих правильное количество (один меньше на продажу креста и еще один на корзину, поскольку он был добавлен после того, как пользователь нажал кнопку).

Так что давайте повторим еще раз. Вот последовательность событий:

  1. Пользователь на своей странице корзины
  2. Пользователь видит список КОРЗИНА пунктов, которые они добавили к своей корзине уже (этот список связан в Cart.aspx и отскок на каждом page load)
  3. Пользователь видит список возможных предметов перекрестной продажи, которые они могут добавить в свою корзину где-то на странице. Этот список является настраиваемым элементом управления, найденным в моем .ascx, и что .ascx, очевидно, находится в моем .aspx. Пользовательский контроль является просто ретранслятор, который перечисляет перекрестные предметы продажи
  4. Пользователь нажимает на одну из кнопок «Добавить в корзину» на одном из крестов продает
  5. Страница обновляется. В загрузке страницы .aspx И .ascx я выхожу в БД и переплетаю оба этих списка на основе нового состояния ... то есть новые списки после того, как элемент был добавлен в корзину, что означает, что теперь элементы корзины должны иметь еще один добавленный в список, и он ... Я ясно вижу, что в новом списке есть еще один.
  6. Страница возвращается после обновления, но я не вижу списки, отражающие новое состояние ... Я не вижу новый элемент в списке корзин, а добавленная перекрестная продажа удаляется из списка перекрестных продаж даже хотя снова оба списка, когда я отлаживаю, показывают правильный набор записей, отражающих новое состояние

так что я потерялся здесь, почему это не показывает мне обновленные результаты.

ответ

1

Проблема заключается в том, что после page_load вызывается обработчик событий для кнопки «добавить в корзину». Это означает, что старые элементы связаны.

Решение было бы вручную принудительно.DataBind() в обработчике событий.

Тем не менее, я бы рекомендовал остановиться на

if(!Page.IsPostBack) 
{ 
    // bind cart 
} 

в Page_Load, чтобы избежать нескольких привязок.

+0

Кнопка «Добавить в корзину» на самом деле просто гиперссылка (не asp.net). При щелчке он перенаправляет со значением в querystring, а страница, обрабатывающая перенаправление, проверяет это значение и выполняет ли какая-либо функциональность, необходимую для перемещения элемента в элементы корзины. – PositiveGuy

+0

В вашей проверке! Page.IsPostBack не помешает ли кто-либо из моих переупорядочивающих вызовов, если это Page_Load? – PositiveGuy

+0

Дело в том, что я хочу, чтобы результат восстановления отображался на что-либо. Загрузка страницы, обратная передача, в любое время, когда страница загружает период, будь то после обратной передачи или нет! – PositiveGuy

0

Хорошо, так как моя кнопка Добавить в корзину - это просто гиперссылка, и пользовательский элемент управления проверяет флаг в querystring, чтобы отключить метод, который перемещает элемент (он также получает элемент # в строке запроса) , Я просто сделал перенаправление (Response.Redirect (Request.Path);) после перехода в корзину на родительскую страницу .aspx. Таким образом, он попадет на загрузку страницы как для cart.aspx, так и для myusercontrol.ascx и перенастроит сетки.

Смежные вопросы