楼主只是想每天写点东西这样帮助自己的一个累积吧。

说明:楼主现在已经清楚了AJAX是怎么回事了,现在由于工作原因又摆弄起了UpdatePanel所以从AJAX的角度来分析一下UpdatePanel的使用。

原因:分到手里的一个项目是WebForm的用到了UpdatePanel,再加上当初在用这个UpdatePanel的时候确实没搞清楚。

好了闲话少说,就来聊聊这个当初让我没理解清楚的这个控件吧,说实话我觉得AJAX理解起来很容易,但是UpdatePanel确实让我当时很困惑。

太学术的什么的我也不想说了,楼主一贯的理念就是怎么样简单的描述一个事情。

AJAX怎么工作:

以前我们的页面就是发送请求给应用服务器,应用服务器计算响应,发个反馈给浏览器。这个应用服务器计算响应到最终发送浏览器的过程,用户操作的浏览器处于停滞等待状态,这种体验很不好。

所以后来大家想到了AJAX,其实就是有一个叫XMLHttpRequest这个一个东西,浏览器跟他说你给我提交个东西给应用服务器,应用服务器反馈给你东西了你就跟我讲,然后我来处理。而这个过程中浏览器不会处于等待状态,用户可以一直操作,并且XMLHttpRquest接受到服务器端的东西的后(可以是JSON也可以是XML,或者字符串),浏览器会选择刷新一些页面元素(DOM)也可以叫局部刷新吧。

我估计不用我多说大家应该都懂,但是我这里描述主要是为了说明后面的UpdatePanel怎么做的。

那么我们来分析一下要完成AJAX需要哪几部操作。

1、你需要一个触发(触发AJAX请求)。

2、你需要一个服务器端的服务(可以是ASHX或者ASPX,只要是服务就行了)

3、得到返回内容你得刷新前台的页面元素(DOM),其实我们代码中实现的时候是放在触发的回调里面的,这边为了理解UpdatePanel,分开说吧。

还是用jQuery写个栗子吧。

    $.post("请求的服务器服务", {传递的参数},function (data) {
//得到返回修改dom
})

上面的代码只包含了上面说的2,3两点,至于1很好理解,你这个jQuery方法总得要个按钮或者其他的触发吧。

UpdatePanel是怎么干的

其实UpdatePanel最终要完成的就是我上面说的那几步,但是如何完成呢。(ScriptManager需要配套使用)

UpdatePanel其实是在圈地,他在页面里面圈的内容就是回调要刷新的内容,这个很好理解UpdatePanel就是为了局部刷新而存在,但是其实感觉肯定没有回调自己来处理自由,但是你既然让别人封装你肯定要牺牲点自由了。

1、那么问题来了,地圈完了已经知道哪些地方要局部刷新了,那么如何来触发请求进行局部刷新呢?这时候有个缺省约定,就是UpdatePanel认为他内部的一些服务器端控件是可以触发请求的,例如:UpdatePanel内的一个按钮。 (其实这些请求触发,以及发送都是通过 ScriptManager服务器控件和客户端 PageRequestManager 类来协调,这其实就是ScriptManager为什么要配套使用的原因)。

2、那么问题继续来了,我现在觉得并不一定是在UpdatePanel内的按钮才能触发UpdatePanel的局部刷新,外面的应该也行呀。想想场景我点击一个按钮,局部刷新一个列表。好的这个是用ScriptManager上场了,不能引用了不用呀,你可以通过ScriptManager的RegisterAsyncPostBackContorl(你的那个按钮),你这个按钮就可以异步请求按钮的处理事件,就可以局部刷新了。

3、那么问题继续来呀,我现在在UpdatePanel里面有个按钮,但是我还是希望他能同步提交全局刷新一下,比如UpdatePanel中有个导出Excel按钮,不过默认的情况是内部的按钮都是异步的,那么怎么办呢,一样用ScriptManager的RegisterPostBackContorl注册这个按钮是同步提交了。当然你也可以在UpdatePanel里面注册异步,外面注册同步,虽然没卵子用,但是你要这么写也没什么办法。

4、那么问题继续来了,这里我们就来讨论UpdatePanel他那牛B的属性了,首先第一个UpdatePanel有个UpdateMode,有两个选项,一个是Always,一个是Conditional,这是啥屌意思呢,一个是总是,一个是有条件的。咋理解其实是这样的,一个页面其实可以有很多的UpdatePanel,那么Always是什么意思呢,意思就是当有异步请求回调的时候(就是异步回来的时候要开始刷新页面了)Always就是谁异步我都刷新,Conditional很显然的他肯定是跟Always不一样的,所以他一般是什么样的呢。1、当前UpdatePanel异步我才刷新即我圈地里面的异步我才刷新,2、叫我刷新也行,显式调用Update方法,XXupdatePanel.Update(),3、我爹刷新我也刷新,当然全局刷新肯定刷新这个UpdatePanel,不过这里说的其实是他的父UpdatePanel。目的其实就是异步的时候向服务器少要点东西,占用资源少点。

5、继续聊另外一个属性吧。ChildrenAsTriggers其实这个就是UpdatePanel圈地内的控件能触发自己的属性,这个缺省值是true,是什么意思呢,很明白了就是我儿子(圈地内容)能触发异步并且刷新我自己,至于刷不刷别人看别人的UpdatePanel的UpdateMode是怎么设置的。那么为false是什么情况,还有就是API中特地提到UpdateMode为Always但是ChildrenAsTriggers为false会报错,首先先理解ChildrenAsTriggers为false什么意思,其实即使为false内部按钮也会发异步请求也发了,但是意思是不刷新自己所在的UpdatePanel容器,这时候问题就来了,UpdateMode设置成Always意思就是谁异步我都刷新,ChildrenAsTriggers为false就是我儿子异步都不能刷新我,所以前后矛盾。那么ChildrenAsTriggers为false到底什么时候使用呢,其实是在两个UpdatePanel当然没有嵌套关系,A希望刷新B但是自己不刷新。这时候就会需要这个属性,例如:我们左侧有个菜单是异步出来的,右边有个列表是异步出来的,我们希望左边点菜单按钮的时候刷右边的列表就可以这么用。

至于UpdatePanel内部可以显式的写一些trigger这个大家自己理解一下吧,其实就是跟ScriptManager的去注册一个控件同步和异步是一样的。

小编很LOW都2015年了还摆弄这么老的技术,但是工作需要,只有工作需要的技术才是好技术。

20150918->1

重新理解一遍UpdatePanel的更多相关文章

  1. USB学习小记-HID类键盘的报告描述符的理解

    前言 断断续续的学习了将近三个月,才把USB的HID类搞明白,速度真是够慢的.利用晚上+周末的时间学习自己的东西确实是必要的,不过效率是有点低,以后要更专注一些才行,希望自己能做到吧. 在学习过程中, ...

  2. SQL Server 深入解析索引存储(下)

    标签:SQL SERVER/MSSQL SERVER/数据库/DBA/索引体系结构/非聚集索引 概述 非聚集索引与聚集索引具有相同的 B 树结构,它们之间的显著差别在于以下两点: 基础表的数据行不按非 ...

  3. CSS浮动文摘

    很早以前就接触过CSS,但对于浮动始终非常迷惑,可能是自身理解能力差,也可能是没能遇到一篇通俗的教程.        写在前面的话:        由于CSS内容比较多,没有精力从头到尾讲一遍,只能有 ...

  4. css(一)

    CSS CSS是Cascading Style Sheets的简称,中文称为层叠样式表,用来控制网页数据的表现,可以使网页的表现与数据内容分离. 一 css的四种引入方式 1.行内式          ...

  5. CSS浮动(float,clear)通俗讲解

    首先要知道,div是块级元素,在页面中独占一行,自上而下排列,也就是传说中的流.如下图: 可以看出,即使div1的宽度很小,页面中一行可以容下div1和div2,div2也不会排在div1后边,因为d ...

  6. 经验分享:CSS浮动(float,clear)通俗讲解

    很早以前就接触过CSS,但对于浮动始终非常迷惑,可能是自身理解能力差,也可能是没能遇到一篇通俗的教程. 前些天小菜终于搞懂了浮动的基本原理,迫不及待的分享给大家. 写在前面的话: 由于CSS内容比较多 ...

  7. 不可或缺 Windows Native (7) - C 语言: 指针

    [源码下载] 不可或缺 Windows Native (7) - C 语言: 指针 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 指针 示例cPointer.h #i ...

  8. IIS5与IIS6 应用程序生命周期和页生命周期

    在写这篇博客之前,知好多前辈已经写过,自己班门弄斧,主要是加深自己对细节的理解,另一方面希望对浏览此篇文章的读者一个新的认识.注定是一长篇.肯定有新的认识,图示都是原创. 此篇所有牵涉的细节,我会一一 ...

  9. kuangbin_ShortPath R (HDU 4370)

    出题人真是脑洞堪比黑洞 (然后自己也被吸进去了 理解一遍题意 三个条件可以转化为 1的出度是1, n的入度是1, 2~n-1的出度等于入度 不难发现1-n的最短路符合题意 然而其实还有另一种情况 1为 ...

随机推荐

  1. FtpClient的使用

    摘自:http://hi.baidu.com/yuanhotel/item/000b6334894d11f42784f4da Java的ftp操作 package com.why.ftp; impor ...

  2. HDU 5805 - NanoApe Loves Sequence (BestCoder Round #86)

    先找相邻差值的最大,第二大,第三大 删去端点会减少一个值, 删去其余点会减少两个值,新增一个值,所以新增和现存的最大的值比较一下取最大即可 #include <iostream> #inc ...

  3. CDZSC_2015寒假新人(1)——基础 a

    Description Contest time again! How excited it is to see balloons floating around. But to tell you a ...

  4. ubuntu安装jira步骤

    背景:前些日子在原来的一台云主机上已经部署了一个jira系统,使用一段时间后发现jira占用很多的系统资源,导致主机上的其他服务无法正常工作,于是老大新注册了一个云主机专门用于运行jira,可见公司对 ...

  5. mysql tee 命令

    tee 命令说明: 用过mysql的应该都会知道mysql有一个叫show 的命令,这个命令应该是SQL标准之外的一个扩展:和这个类似mysql还扩展了一个叫tee的命令. tee的功能是把你的所有输 ...

  6. JavaScript实现私有属性

    原文:JavaScript实现私有属性 JavaScript被很多人认为并不是一种面向对象语言,原因有很多种,比如JavaScript没有类,不能提供传统的类式继承:再比如JavaScript不能实现 ...

  7. Inno Setup 创建站点,创建虚拟目录

    原文 http://hi.baidu.com/0531_sunmiles/item/ce22554ab7d33d0be9350477 下面的这段代码是用Inno Setup 做安装包的时候创建IIS新 ...

  8. 2014第7周三初识CouchBase

    今天主要还是完善需求,然后提交评审流程,尽可能不纠结一些细节问题后发现自己速度更快了,或许这才是最好的顺序,其它可能的问题就留在后续发现并解决吧.今天第一次听到并重视下couchbase.上午看到同事 ...

  9. linux之SQL语句简明教程---主键,外来键

    主键 (Primary Key) 中的每一笔资料都是表格中的唯一值.换言之,它是用来独一无二地确认一个表格中的每一行资料.主键可以是原本资料内的一个栏位,或是一个人造栏位 (与原本资料没有关系的栏位) ...

  10. hdu 1575 Tr A(矩阵快速幂乘法优化算法)

    Problem Description A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%. Input 数据的第一行是一个T,表示有T组数据. 每组数据的第一行有n ...