Несколько панелей обновления на странице удаляют календарь JavaScript Datepicker из текстового поля

На самом деле у меня есть несколько панелей обновления на странице, которые обновляют разные значения на сервере, но проблема в том, что у меня есть текстовое поле, к которому я прикрепляю класс javascript для datepicker при событии загрузки.

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

txtDate.Attributes.Add("class", "show-week w16em dateformat-d-sl-m-sl-Y"); 

Перед использованием какой-либо панели обновлений это выглядит так

alt text

После обновления любая панель обновлений управляет следующим образом.

alt text

Но элементы управления Date, которых нет ни в одной панели обновлений, в порядке и работают.

И в этих панелях обновления я фактически сохраняю значения в DataTables и сохраняю эти DataTables в viewState .... без изменений в HTML.


person Azhar    schedule 06.10.2010    source источник


Ответы (3)


Я предполагаю, что датапикер и его текстовое поле помещены в панель обновлений?

Если вы выполните ajax-postback с UpdatePanels, сервер отправит html обратно для всех UpdatePanels на странице и обновит все их содержимое, поэтому ваш datepicker исчезнет.

Если вы установите UpdateMode=Conditional в UpdatePanels, то обновятся только UpdatePanels, которые вызвали обратную передачу.

Другой вариант - воссоздать datepicker с помощью ScriptManager.RegisterStartupScript, но это, возможно, сбрасывает его значение (зависит от того, какой это datepicker).

person Willem    schedule 06.10.2010
comment
хорошо ... но что, если эта панель обновлений также отправляет или обновляет на сервере, в следующий раз такая же проблема с JavaScript будет там снова - person Azhar; 06.10.2010
comment
Правда, тогда вам придется воссоздавать datepicker с помощью javascript каждый раз, когда эта панель обновляется, но как именно это сделать, зависит от того, какой datepicker вы используете. Я предполагаю, что вы запускаете некоторую загрузку кода, попробуйте также загрузить этот код при обратной передаче (ajax-). - person Willem; 06.10.2010

Вы меняете INNERHTML DIV или TABLE, в которых присутствует TextBox, потому что, если вы затем удаляете элемент управления календарем после обновления этого DIV или TABLE.

person KhanZeeshan    schedule 06.10.2010
comment
нет .... на этих панелях я фактически сохраняю значения в DataTables, а теперь я сохраняю их в viewState .... без изменений в HTML. - person Azhar; 06.10.2010
comment
то вам нужно повторно привязать элемент управления календарем после каждого запроса ajax, например, y34h. Повторно привязать календарь; Sys.Application.add_init (function () {$ create (AjaxControlToolkit.CalendarBehavior, {button: $ get (‹% = PopupButtonID%›), cssClass: cal_Theme1, формат: MM / dd / yyyy, id: ‹% = CalenderEntenderID% ›, PopupPosition: 1}, null, null, $ get (‹% = TargerControlId% ›));}); - person KhanZeeshan; 06.10.2010

какой бы метод вы ни использовали для присоединения datepicker, вы должны вызвать его снова после обновления панели обновления.

вы можете сделать это на стороне сервера с помощью this :

// at some point of the method that updates the panel
ScriptManager.RegisterStartupScript(
    this, typeof(object), "someUniqueKey", "theScript();", true);

или на стороне клиента с этим:

// <body onload='...'> or in the <head>
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(
    function () { theScript() });
person y34h    schedule 06.10.2010