2009-11-13 45 views
1

我正在使用ASP.NET Ajax和JQuery。我有一个单击事件,在UpdatePanel中的对象上添加/删除css类,但是当发生ASP.NET部分回发时,我将失去“状态”。这是我尝试创建的最小示例;我如何保持css类的状态?丢失的css类通过jquery添加到updatepanel部分回发

<%@ 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

考虑使用客户端PageRequestManager事件保存/恢复状态(请注意,以下是JavaScript的):从Zincorp

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

礼貌你能解释一下?我将如何保存状态?在全局的js变量中,会话变量,??代码隐藏中的私有变量似乎在部分回发中丢失了其值(状态) – user210757

+0

通过全局js变量。它们不会改变,因为页面仍然存在,只有一部分正在更新。 上面的代码都是JavaScript – zincorp

0

updatepanel替换其范围内的DOM,因此您做出的任何修改都不会在回发之间持续存在。

你可能会看到jQuery的“生活”事件(假设 - 我没有尝试过),当新的元素被添加到文档中时,它们可以重新应用自己。