Проблема с Ajax / Asp.Net Update Panel - PullRequest
2 голосов
/ 05 мая 2011

У меня есть панель обновления, но, кажется, она удаляет класс из одного из моих входов после его обновления

Вот код при первой загрузке

<input type="text" class="txt1 hasDatepicker" id="txt1" name="txt1">

А вот код после запуска обновления

<input type="text" class="txt1" id="txt1" name="txt1">

Вот jQuery, который работает на стороне клиента

 $(function() {
     $(".txt1").datepicker({ dateFormat: 'D d M yy' }); 
 });

Кажется, он просто удаляет класс hasDatepicker после запуска обновления, и это вызывает проблемы.

Есть идеи, почему он это делает?

Ответы [ 2 ]

3 голосов
/ 05 мая 2011

Событие готовности jQuery сработает только при первой загрузке страницы. Он не обнаруживает обновленный AJAX, даже вызванный из самого jQuery, потому что страница уже есть.

Однако на сервере есть метод, аналогичный Page_Load: если он существует в глобальной области JavaScript, он вызывается после загрузки страницы - в терминах ASP.NET это происходит либо в первый раз, либо после частичного обновления после обратной передачи / асинхронного обновления / AJAX обновления.

Имя немного отличается в соответствии с соглашениями JavaScript:

function pageLoad(){   
    $(".txt1").datepicker({ dateFormat: 'D d M yy' }); 
}

Попробуйте и скажите мне в комментариях, если это не сработает ...

Другой ответ (получение ссылки на диспетчер сценариев с последующим вызовом add_pageLoaded() и передача функции) аналогичен ServerSide, когда вы выполняете this.Load += new .... на стороне сервера, а этот - версия Page_Load (подключение к событию). включен по умолчанию). Конечно, я имею в виду их соответствие на стороне клиента не совсем то же самое. Итак, оба хороши, и оба должны работать, но 2-й способ может быть полезен, если у вас есть несколько обработчиков событий загрузки, которые могут усложнить ситуацию больше, чем необходимо.

1 голос
/ 05 мая 2011

Вам нужно будет использовать PageRequestManager, для чего требуется ScriptManager на странице. Вы можете объявить его как <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>, а затем создать экземпляр PageRequestManager как:

<script type="text/javascript">
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_pageLoaded(SomeFunction);
    prm.add_pageLoaded(function() {});

    function SomeFunction() {}
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...