转:

http://www.cnblogs.com/Tim_Liu/archive/2010/11/25/1887937.html

最近在做一个项目,因为涉及到的字段数量很多所以想偷把懒,便使用了UpdatePannel,然后也用上了Jquery的插件做效果,然而当updatepannel中按钮点击后,jquery代码及样式都不见了,因为之前遇到过js类似的问题,所以就特意查了下网络上各大虾的解说,以下总结下大虾门的说法,顺便将自己的写法也记录下来。

以下是 LanceZhang's Tech Blog:原文地址 http://www.cnblogs.com/blodfox777/archive/2008/12/08/1347805.html

问题重现:


. 在页面中添加ScriptManager和UpdatePanel
 
. 在UpdatePanel中添加元素A
 
. 用jQuery对元素A添加X效果
 
. 在UpdatePanel中加一个Button B用作postback
 
结果:在第一次页面加载时,元素A的X效果正常,点击B之后,页面局部刷新,此时,元素A失去X效果

分析1:UpdatePanel

UpdatePanel在应用中主要用于局部刷新,避免整个页面的Postback。

UpdatePanel实现局部刷新的核心在于MicrosoftAjaxWebForm.js文件,它的局部刷新过程就是将页面提交到服务端(包含ViewState),执行服务端代码后异步将在UpdatePanel内的HTML进行重新呈现。

在此过程中,页面的其它部分并没有状态更改。

分析2:jQuery

jQuery可以通过简单的代码对HTML元素添加各种属性和事件句柄,我们可以在这里看到官方的文档:

Tutorials:How jQuery Works http://docs.jquery.com/How_jQuery_Works

在这里,我们可以得知,jQuery有个重要的事件标记“ready”,一般对HTML元素的效果和事件句柄都通过这个ready事件来添加,如下:


$(document).ready(function () {     $("p").text("The DOM is now loaded and can be manipulated."); });

官方对此的说明是:ready事件会在DOM完全加载后运行一次,OK,至此,问题的原因差不多明白了:

原因:

因为在UpdatePanel局部刷新之后,其中的元素A被重写,而此时整个DOM树并没有重新加载,所以jQuery的ready事件并没有触发,所以元素A就失去了原有的特效。

解决方案:

我们可以将ready事件中执行的代码提取出来,然后通过捕获ScriptManager的EndRequest事件,在每次UpdatePanel局部刷新之后执行一次jQuery初始化代码,如下所示:


    <script type="text/javascript">         function load() {             Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);         }
 
function EndRequestHandler() {             ReadyFunction1();             ReadyFunction2();             ReadyFunction3();         }     </script><body onload="load()">
以下是我试验的代码(注意红色标示的代码) 实现方式1:

<link href="CSS/jquery-ui-1.8.6.custom.css" rel="stylesheet" type="text/css" />
    <script src="Scripts/jquery-1.4.2.min.js" type="text/javascript"></script>
    <script src="Scripts/jquery-ui-1.8.6.custom.min.js" type="text/javascript"></script>
    <script language="javascript" type="text/javascript">
        $().ready(function () {
         <span style="color: rgb(255, 0, 0);">   load();
</span>            addTabs();
        });
 
        function addTabs() {
            $("#tabs").tabs();
        }
 
        function <span style="color: rgb(255, 0, 0);">load() </span>{
            Sys.WebForms.PageRequestManager.getInstance().add_endRequest(<span style="color: rgb(255, 0, 0);">EndRequestHandler</span>);
        }
 
        function <span style="color: rgb(255, 0, 0);">EndRequestHandler()</span> {
            addTabs();
        }
    </script>
<asp:ScriptManager ID="SM1" runat="server">
    </asp:ScriptManager>
    <div id="tabs">
        <ul>
            <li><a href="#tabs-1">Nunc tincidunt</a></li>
            <li><a href="#tabs-2">Proin dolor</a></li>
            <li><a href="#tabs-3">Aenean lacinia</a></li>
        </ul>
        <div id="tabs-1">
            <p>
                Tab 1 content</p>
        </div>
        <div id="tabs-2">
            <asp:UpdatePanel ID="Up_1" runat="server">
                <contenttemplate>
            <p>
                Tab 2 content</p>
                <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /></contenttemplate>
                <triggers>
            <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
          
            </triggers> </asp:UpdatePanel>
        </div>
        <div id="tabs-3">
            <p>
                Tab 3 content</p>
        </div>
    </div>

方法2: protected void Button1_Click(object sender, EventArgs e)     {         ScriptManager.RegisterStartupScript(this.Up_1, this.GetType(), "asdfas", "addTabs();", true);     }

JQuery和UpdatePannel的问题的更多相关文章

  1. asp.net ajax与jquery的冲突问题解决

    在网上看到有网友说,用了updatepannel这个asp.net ajax异步更新面板后,javascript或者jquery代码不起作用,实际上,可以在updatepannel的触发器中进行设置解 ...

  2. c#、sql、asp.net、js、ajax、jquery大学知识点笔记

    <table cellSpacing="0" cellPadding="0" width="609" height="470 ...

  3. WebForm使用JQuery实现DropDownList无刷新联动

    目录(?)[-] 1  JS代码 2 页面相关控件用的是平台封装的控件普通DropDownList也可以 3 后台C代码 注意事项   原来用的微软封装的Ajax控件UpdatePannel和Scri ...

  4. Angular杂谈系列1-如何在Angular2中使用jQuery及其插件

    jQuery,让我们对dom的操作更加便捷.由于其易用性和可扩展性,jQuer也迅速风靡全球,各种插件也是目不暇接. 我相信很多人并不能直接远离jQuery去做前端,因为它太好用了,我们以前做的东西大 ...

  5. jQuery UI resizable使用注意事项、实时等比例拉伸及你不知道的技巧

    这篇文章总结的是我在使用resizable插件的过程中,遇到的问题及变通应用的奇思妙想. 一.resizable使用注意事项 以下是我在jsfiddle上写的测试demo:http://jsfiddl ...

  6. Jquery的点击事件,三句代码完成全选事件

    先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

  7. jQuery实践-网页版2048小游戏

    ▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...

  8. jquery和Js的区别和基础操作

    jqery的语法和js的语法一样,算是把js升级了一下,这两种语法可以一起使用,只不过是用jqery更加方便 一个页面想要使用jqery的话,先要引入一下jqery包,jqery包从网上下一个就可以, ...

  9. jQuery之ajax实现篇

    jQuery的ajax方法非常好用,这么好的东西,你想拥有一个属于自己的ajax么?接下来,我们来自己做一个简单的ajax吧. 实现功能 由于jq中的ajax方法是用了内置的deferred模块,是P ...

随机推荐

  1. 关于Java(介绍)

    基于Java官方指导文档,开展学习 Java是什么 Java 是编程语言,也是一个平台 特性 简单 可移植 面向对象 分布式运算高性能 健壮 安全 动态 体系结构中立 记忆宫殿:恋爱是件简单的事,但放 ...

  2. nutch 索引

    nutch开发环境搭建     nutch-1.3导入eclipse     nutch-1.7导入eclipse nutch部署     nutch-1.3linux下部署     nutch-1. ...

  3. Java多线程初学者指南(11):使用Synchronized块同步方法

    synchronized关键字有两种用法.第一种就是在<使用Synchronized关键字同步类方法>一文中所介绍的直接用在方法的定义中.另外一种就是synchronized块.我们不仅可 ...

  4. LCIS tyvj1071 DP优化

    思路: f[i][j]表示n1串第i个与n2串第j个且以j结尾的LCIS长度. 很好想的一个DP. 然后难点是优化.这道题也算是用到了DP优化的一个经典类型吧. 可以这样说,这类DP优化的起因是发现重 ...

  5. 【BZOJ3439】 Kpm的MC密码 (TRIE+主席树)

    3439: Kpm的MC密码 Description 背景 想Kpm当年为了防止别人随便进入他的MC,给他的PC设了各种奇怪的密码和验证问题(不要问我他是怎么设的...),于是乎,他现在理所当然地忘记 ...

  6. [收藏转贴]struct探索·extern "C"含义探索 ·C++与C的混合编程·C 语言高效编程的几招

    一.C/C++语言 struct深层探索 1.自然对界 struct是一种复合数据类型,其构成元素既可以是基本数据类型(如 int.long.float等)的变量,也可以是一些复合数据类型(如 arr ...

  7. 方便的Chrome取色插件ColorPick Eyedropper [设计, FE必备]

    最近在和Design合作开发, 她发过来的原型图有各种各样色配色, 不想让她一个一个地标记颜色, 嫌效率低. 于是自己找到一款方便的Chrome取色插件, 叫做ColorPick Eyedropper ...

  8. 以面到点的学习MFC

    市面上讲解学习MFC的书籍不胜其多,但是阅读的同学呢,看了一些内容以后,就无法阅读下去了,觉得MFC好难,有的呢,就会直接去看别人写的程序,不管是大或小,有时候也能明白一点点,但是总是走不出自己开发设 ...

  9. linux上TCP connection timeout的原因查找

    linux上TCP connection timeout的原因查找 好久没有写文章了, 今天解决了一个网络连接超时的问题, 记录以备查看. 最近在线上nginx经常出现输出connection tim ...

  10. sql server 2005+ 翻页

    select * from ( select row_number() over (order by dm) row,* from t_zycp where dm like '%4%' ) tmp