Asp.Net (vb) Force Postback в коде позади - PullRequest
5 голосов
/ 27 мая 2009

Мне нужен способ принудительной обратной передачи или перезагрузки страницы в codebehind. Пробовал использовать какой-то javascript, но не получил его на работу. Просматривая сеть, я вижу первый вопрос "почему"?

Обстоятельства состоят в том, что у меня есть выпадающий список на автоответчике, а параметр выбора источника данных gridview получен из выбранного значения этого выпадающего списка. Таким образом, страница работает нормально, а содержимое обновляется при каждом изменении выбранного элемента. Но некоторые ссылки и кнопки убирают клиента со страницы, поэтому они возвращаются позже.

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

Есть идеи? Разумеется, полный постбэк / повторная загрузка страницы - не единственный вариант, достаточно просто обновить gridview / источник данных для обновления. Я просто не знаю, как это сделать, кроме перезагрузки всей страницы.

Спасибо.

Ответы [ 6 ]

9 голосов
/ 27 мая 2009

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

Почему вы не можете просто перепривязать свой GridView после программного изменения значения раскрывающегося списка. например временная шкала будет что-то вроде.

  • Человек возвращается на страницу (не назад)
  • GridView связывается со значением по умолчанию
  • Загрузка страницы
    • Проверьте переменную сеанса
    • Если найдено значение
    • Установите выбранное значение DropDownList
    • Снова вызовите .DataBind(), чтобы GridView / DataSource заставил его выполнить повторную привязку.
2 голосов
/ 27 мая 2009

Почему вы не можете использовать другое событие страницы? Вы пробовали PreRenderComplete? Помните, что порядок событий важен в обратных передачах. PreRenderComplete - это событие last , которое вызывается до отображения страницы. На самом деле Page_Load находится где-то посередине.

Я делаю подобные вещи все время на работе.

Protected Sub Page_PreRenderComplete(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRenderComplete
    Session("Value") = ddlList.SelectedValue
End Sub

Этот код, вероятно, неверен, но он просто дает вам представление о событии.

1 голос
/ 27 мая 2009

Почему бы не обработать событие DataBinding GridView и не проверить значение в сеансе в этом обработчике? Если он не равен параметру dropdownlist, вы можете изменить его и позволить привязке данных пройти.

См. мой ответ здесь для более общего примера, который изменяет команду SelectCommand элемента управления источником данных. Таким же образом вы сможете изменить значение ControlParameter. Этот ответ делает то же самое, но для (вложенного) повторителя.

Если это не сработает, то ответ Eoin будет лучшим способом (перепривязать GridView).

0 голосов
/ 28 марта 2012

Другой способ, если вы все еще ищете сообщение назад, чтобы сделать response.redirect("~/ImOnThisPageAlready"); на той же странице.
довольно просто, не знаю, насколько занят ваш сайт, но он очень быстро работает для моего небольшого приложения.

0 голосов
/ 09 июня 2011

У меня была похожая проблема ... Исправление Кеззера сработало для меня.

Просто положите:

Chart1.databind()

В событии PreRenderComplete в вашем коде.

Поскольку PreRender complete работает как самая последняя вещь перед визуализацией диаграммы, если вы «привязываете» свою диаграмму здесь, она гарантирует, что то, что визуально «отображается» в ваших выпадающих списках, будет фактически тем, что используется в качестве значений для визуализировать вашу диаграмму.

Наша проблема была связана с каскадными выпадающими сообщениями авто-обратной передачи. У нас были выпадающие списки Country, State, City. Если пользователь выбрал «Соединенные Штаты», «Огайо», «Кливленд», все работало нормально, но затем, если они вернулись и изменили страну на «Франция», это привело бы к ошибке на графике, даже если в выпадающих списках было автоматически с учетом этого изменения и сбросьте Штат и Город до первых доступных значений.

Добавление автоответчика в PreRenderComplete заставило диаграмму «получить: ее значения после выпадающего списка были автоматически исправлены ... потрясающе!

0 голосов
/ 27 мая 2009

Спасибо за помощь всем. Я собирался последовать предложению Церебра, но затем коллега предложил другую идею. Закомментированная строка была заменена некомментированной строкой, как показано ниже.

<SelectParameters>
   <%--<asp:Parameter Name="timevalue" Type="String" DefaultValue="now" />--%>
   <asp:ControlParameter ControlID="timevalueDropDownList" PropertyName="SelectedValue" Name="timevalue" DefaultValue="now" />
</SelectParameters>

Кроме этого, все в моем первом посте применимо. В загрузке страницы я проверил сессию и применил изменения к timevalueDropDownList, как и раньше. Сессия всегда обновлялась в событии SelectedIndexChanged и т. Д.

Но, как всегда, есть хорошие идеи с ответами, и я обязательно буду ссылаться на них в подобных вопросах в будущем. У меня их было много, но я просто нашел другие способы обойти их, но теперь мне может и не понадобиться. ;)

...