Потеря класса CSS добавлена ​​через JQuery на частичную обратную передачу панели обновления - PullRequest
1 голос
/ 14 ноября 2009

Я использую ASP.NET Ajax с JQuery. У меня есть событие click, которое добавляет / удаляет классы css для объектов в UpdatePanel, но когда происходит частичная обратная передача ASP.NET, я теряю «состояние». Вот минимальный пример, который я пытался создать; Как мне сохранить состояние класса CSS?

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>

    <style type="text/css">
        .active { background: #000000; color: #ffffff; }
        .test {}
    </style>


    <script src="jquery-1.3.2.js" type="text/javascript"></script> 

    <script language="javascript" type="text/javascript">

        function pageLoad(sender, args) {

            // rebind events lost in partial postback
            $(".test").unbind();

            $(".test").click(function() {

                $(".test").removeClass("active");
                $(this).addClass("active");

            });

        }

    </script>








</head>
<body>
    <form id="form1" runat="server">


    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>

    <asp:Timer ID="Timer1" runat="server" Interval="30000" ontick="Timer1_Tick">
    </asp:Timer>

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">

    <Triggers>
    <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
    </Triggers>

    <ContentTemplate>


    <div class="test">

        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

    </div>


    <div class="test">

        <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>

    </div>

    </ContentTemplate>
    </asp:UpdatePanel>

    </form>
</body>
</html>

Ответы [ 3 ]

3 голосов
/ 14 ноября 2009

Изучите использование клиентских событий PageRequestManager для сохранения / восстановления состояния (обратите внимание, ниже приведен JavaScript):

function SaveState(sender, args) 
{
  // code to save state of update panel controls
}

function ReapplyState(sender, args)
{

  // code to reapply state of update panel controls
}

Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(SaveState);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(ReapplyState);
0 голосов
/ 18 мая 2017

Пример из Zincorp у меня не сработал. Мне пришлось поместить строки sys.webform в отдельную функцию, которую мне пришлось связать с событием onload страницы тела:

функция загрузки ()

{Sys.WebForms.PageRequestManager.getInstance () add_endRequest (ReapplyState). }

и в теге body добавьте onload = ”load ()”

Предоставлено https://zeemalik.wordpress.com/2007/11/27/how-to-call-client-side-javascript-function-after-an-updatepanel-asychronous-ajax-request-is-over/

0 голосов
/ 14 ноября 2009

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

Вы можете посмотреть на «живые» события jQuery, которые (предположительно - я не пробовал) повторно применяются при добавлении в документ новых элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...