#jquery #asp.net #visual-studio #updatepanel
#jquery #asp.net #visual-studio #панель обновления
Вопрос:
Сценарий 1 (который работает)Это POC, который я создал. У меня есть менеджер сценариев, текстовое поле html, ASP.NET кнопка, панель обновления с установленным асинхронным триггером для события нажатия вышеупомянутой кнопки. Для текстового поля html у меня есть, onkeyup='__doPostBack('<%=ASPBUTTON.ClientID%>','')
. И ЭТО РАБОТАЕТ, событие нажатия кнопки нажато, и updatepanel обновляется асинхронно.
Сценарий 2 (он не работает)Единственное отличие от моей реальной кодовой базы заключается в том, что у меня есть JQUERY FILAMENTGROUP datetimepicker, событие onchange которого используется вместо onchange текстового поля html. Кроме того, здесь моя страница использует главную страницу. Теперь моя проблема в том, что при срабатывании события onchange для datetimepicker запрос отправляется на сторону сервера, но событие нажатия кнопки не запускается.
Еще несколько деталей, я хочу автоматически обновлять панель обновлений при выборе datetimepicker. Таким образом, кнопка была бы фактически скрыта с помощью css (отображение:отсутствует).
Идентификатор кнопки — btnDateRangeCallback
Текстовое поле Datetimepicker (не ASP-элемент управления) — DateRange
onChange: function() {__doPostBack('<%=btnDateRangeCallback.ClientID%>', $('#dateRange').val());}
[Пожалуйста, помните, я сказал, что это работает в случае моего упрощенного POC, в то время как в моей реальной кодовой базе я использую masterpage для наследования, и поэтому все эти элементы управления помещаются в contentplaceholder. Кроме того, происходит обратная отправка, и я вижу, что _EVENTTARGET и _EVENTARGUMENT отправляются правильно, если я прерываю работу при загрузке страницы]
Пожалуйста, помогите.
Проще говоря, после обратной отправки, когда я прерываюсь на Page_Load, я вижу запрос.Содержимое формы как, ctl00$ContentPlaceHolder1$SMgr1=ctl00$ContentPlaceHolder1$SMgr1|ctl00_ContentPlaceHolder1_btnDateRangeCallback amp;__EVENTTARGET=ctl00_ContentPlaceHolder1_btnDateRangeCallback amp;_EVENTARGUMENT=5/3/2011 — 6% 2f2/2011 amp;_VIEWSTATE=/wEPDwULLTE3NDY5NDIwMDRkZIuTqMNNsFHlRYhjpKaUCaCXj42h amp;_EVENTVALIDATION=/wEWAgLBx52kBALP6Ln6DdkkwE/rVIKQzKE1L0k4QhIc768w amp;_ASYNCPOST=trueamp;
Почему не происходит событие Click для обратного вызова btnDateRangeCallback???
Ответ №1:
Вместо этого используйте UniqueID: __doPostBack('<%=btnDateRangeCallback.UniqueID %>', ...
Ответ №2:
Измените свой код на этот:
setTimeout(function () { __doPostBack('btnSave', '') }, 500);
Используйте «btnSave Id». Это будет работать во всех браузерах.
Ответ №3:
Почему бы просто не нажать кнопку?
onchange="$('#<%= ASPBUTTON.ClientID %>').click()"
(В идеале, также не используйте встроенные обработчики событий …)
Если это вас не устраивает, вы можете обойти это с помощью __EVENTTARGET
и __EVENTARGUMENT
(руководство см. в этой статье).
Ответ №4:
Причина, по которой он не работает, заключается в том, что он находится в хранилище содержимого.
Первый параметр __doPostBack
используется на стороне сервера, на стороне клиента это может быть что угодно. Вызывается So __doPostBack
и отправляется по желанию, но на сервере значение первого параметра используется для поиска элемента управления, который будет обрабатывать события. Он используется для поиска элемента управления с соответствующим UniqueID.
Когда не в NamingContainer, UniqueID и ClientID совпадают, внутри NamingContainer идентификатор клиента создается с использованием символов подчеркивания (_), а UniqueID создается с использованием знаков доллара ($).
Поскольку значение, которое сервер получает в этом случае, не позволяет ему найти элемент управления, он не знает, какое событие запускать, и поэтому не запускает ни одного, несмотря на регистрацию как post back и появление «__EVENTTARGET», которое позволило бы ему найти элемент управления.
ClientID ИНОГДА будет работать, когда ЕГО НЕТ на главной странице, в частности, он будет работать до тех пор, пока элемент управления не находится внутри NamingContainer
. Причина, по которой это никогда не будет работать внутри главной страницы, заключается в том, что на главной странице всегда есть контейнер именования.