<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_编程，设计</title><subtitle type="text">执着是件好事，但更多他只是个笑话</subtitle><id>http://feed.cnblogs.com/blog/u/21553/rss</id><updated>2011-12-23T04:59:20Z</updated><author><name>MARTIALIS</name><uri>http://www.cnblogs.com/ice5/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ice5/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/21553/rss"/><entry><id>http://www.cnblogs.com/ice5/archive/2011/12/23/2299236.html</id><title type="text">关于程序员成长的一点思考</title><summary type="text">新闻来源:51CTO 程序员的我们，是否想过今后的路该怎么走、如何发展、技术怎样提高?其实这也是我一直在思考的问题。下面就此问题，分享下我的看法。因为我阅历有限，有什么说的不对的，大家一起喷! 一、程序员应该打好基础 1. 现在开发工具众多、语言泛滥，经常听人说”不学CC++神马都是浮云”、”CC++才是万王之王”，CC++就真比PHP、Lua、AS、JAVA牛吗? 其实不在于语言本身，而在于CC++依附的平台。因为最靠近操作系统，所以能发挥其它语言不具有的性能优势，而且很多数据结构、算法、特殊功能 类，CC++是不提供的，需要自己实现。这时就需要自己去温习”数据结构”、”算法”、”T...</summary><published>2011-12-23T04:59:00Z</published><updated>2011-12-23T04:59:00Z</updated><author><name>MARTIALIS</name><uri>http://www.cnblogs.com/ice5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ice5/archive/2011/12/23/2299236.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ice5/archive/2011/12/23/2299236.html"/><content type="html">&lt;div&gt;新闻来源:51CTO&lt;br /&gt; 程序员的我们，是否想过今后的路该怎么走、如何发展、技术怎样提高?其实这也是我一直在思考的问题。下面就此问题，分享下我的看法。因为我阅历有限，有什么说的不对的，大家一起喷! &lt;strong&gt;一、程序员应该打好基础&lt;/strong&gt;&lt;br /&gt; &lt;br /&gt; 1. 现在开发工具众多、语言泛滥，经常听人说&amp;#8221;不学CC++神马都是浮云&amp;#8221;、&amp;#8221;CC++才是万王之王&amp;#8221;，CC++就真比PHP、Lua、AS、JAVA牛吗?&lt;br /&gt; &lt;br /&gt; 其实不在于语言本身，而在于CC++依附的平台。因为最靠近操作系统，所以能发挥其它语言不具有的性能优势，而且很多数据结构、算法、特殊功能 类，CC++是不提供的，需要自己实现。这时就需要自己去温习&amp;#8221;数据结构&amp;#8221;、&amp;#8221;算法&amp;#8221;、&amp;#8221;TCP/IP&amp;#8221;、&amp;#8221;操作系统原理&amp;#8221;、&amp;#8221;编译原理&amp;#8221;等这些知识。正 因为如此，我们学习的东西被沉淀下来，也正因如此，CC++经过定制的功能比封装好的功能性能高。&lt;br /&gt; &lt;br /&gt; 我上大学做项目时，用的是.net平台C#语言,  因为我本性好专研，老师都是把需要研究、比较难的问题交给我。但C#无论是性能和功能都是都是无法跟CC++比的，记得当时是要做一个&amp;#8221;远程控制&amp;#8221;软件， 配置IP和端口后需要连接动态生成客户端程序(木马)，但C#是不提供这个功能的。这也是我工作后转为CC++程序员的原因，碰巧也是开发远程控制软件。 刚开始写出来的程序偶尔会莫名奇妙的崩溃，但经过两个月和更长的时候后，我掌握了CC++。在此要感谢我工作时的指导老师翁跃龙，没有他我的路不会这么平 坦，他教我的不仅仅是技术，更多的是解决问题得思路和做人。&lt;br /&gt; &lt;br /&gt; 2.  有些人会说大学学的东西是肤浅的，是没有用的。想想看，在学校的时候我也经常这么想，但出来后才知道这些东西有多么重要。不过大学学得再扎实，出来后仍然 是需要再温习过的。因为上学毕竟实践少，所学不能所用，计算机是个应用驱动的学科。我们再来看&amp;#8220;计算机考研&amp;#8221;专业课考的什么(这里并不是说考研就一定 好)，&amp;#8221;数据结构&amp;#8221;、&amp;#8221;计算机组成原理&amp;#8221;、&amp;#8221;操作系统&amp;#8221;、&amp;#8221;计算机网络&amp;#8221;。&amp;#8221;数据结构&amp;#8221;、&amp;#8221;计算机组成原理&amp;#8221;这两门课程摆在前面，可见其重要性，分别是软 件和硬件最重要的两门基础课。我不相信不学好&amp;#8221;数据结构&amp;#8221;能够把性能优化做得很好。若说自己学好了，能不看书、不查资料，说出&amp;#8221;B+树、B-数的应用和区 别&amp;#8221;、&amp;#8221;KMP为什么能快速匹配字符串&amp;#8221;、&amp;#8221;快速排序在什么情况会蜕变为o(n^2)&amp;#8221;吗?&lt;br /&gt; &lt;br /&gt; 我也不相信不学透&amp;#8221;计算机组成原理&amp;#8221;能搞通汇编和内核，不知道&amp;#8221;CPU和I/O的交互过程&amp;#8221;、&amp;#8221;指令的执行通路&amp;#8221;、&amp;#8221;CPU运算器的工作原理&amp;#8221;，如何写出 高效的汇编代码?如何弄清楚内核中&amp;#8221;中断&amp;#8221;、&amp;#8221;GDT&amp;#8221;、&amp;#8221;IDT&amp;#8221;这些概念，实模式保护模式如何切换?&amp;#8221;操作系统&amp;#8221;和&amp;#8221;计算机网络&amp;#8221;则是两门非常重要的 支撑学科，信号量为什么是最快的同步方式、线程调度比进程调度快、为什么要做内存缓冲池，这些都是来自&amp;#8221;操作系统&amp;#8221;。而&amp;#8221;计算机网络&amp;#8221;主要是讲述 TCP/IP的，为什么德问&amp;#8221;对于一个具有几百万粉丝的用户，数据如何实时投递到所有用户?&amp;#8221;要使用多播的方式解决、&amp;#8221;如何计算出C/S单向的延迟？&amp;#8221;发 送ICMP包测量，这些都是来自它。&lt;br /&gt; &lt;br /&gt; 我们大学学的课程经过多少国内外知名学者专家研究过的，所以计算机理论课是基础，是解决问题的根源。&amp;#8221;算法分析与设计&amp;#8221;是&amp;#8221;数据结构&amp;#8221;的延 伸，Divide  Conque、贪心、动态规划对于程序算法的优化有很大的指导意义。同样，&amp;#8221;计算机体系结构&amp;#8221;也是&amp;#8221;计算机组成原理&amp;#8221;的拓展。其次，&amp;#8221;编译原理&amp;#8221;、&amp;#8221;数据 库&amp;#8221;、&amp;#8221;软件工程&amp;#8221;等学科的重要性也不言自白。&lt;br /&gt; &lt;br /&gt; &lt;strong&gt;二、实践、理论、再实践&lt;/strong&gt;&lt;br /&gt; &lt;br /&gt; 作为程序员的我们，满足于实现一个程序功能的快感，得意于从网上下载别人的代码加到自己的程序中，陶醉于自己写了上百万行代码。有想过自己是在创造吗，还 是装配车间的技术工人。日趋成熟的开发工具，逐步把有丰富想象力的我们沦为奴隶。从网上下载个压缩库就用着、成熟的加密算法直接使了、包装好的类库就 include。为何不探究其算法实现、性能优化、底层机制。有人会说很&amp;#8221;难&amp;#8221;啊!究竟是难，还是掌握的知识不够，还是理论没有达到一定高度。&lt;br /&gt; &lt;br /&gt; 很难想象不学习&amp;#8221;计算机图形学&amp;#8221;，去做3D项目客户端图形算法的后果；不研究&amp;#8221;数据挖掘&amp;#8221;去分析大量客户数据会做得多好；不攻读&amp;#8221;概率论&amp;#8221;、&amp;#8221;线性代 数&amp;#8221;、&amp;#8221;人工智能&amp;#8221;去设计AI有多么智能。很多人说，这些东西游戏用不着啊，学了有什么用?我承认初学编程时，这些东西只是高谈阔论。若我们工作了n年 后，还只是熟练地做些coding，和刚毕业的学生有什么区别。编程工具只是&amp;#8221;工具&amp;#8221;而已，别忘记了我们是改变世界的程序员，不提高理论，何以创新、公司 拿什么优势和别人去竞争。&lt;br /&gt; &lt;br /&gt; &amp;#8220;研发&amp;#8221;是&amp;#8221;研究&amp;#8221;和&amp;#8221;开发&amp;#8221;两大块，只做开发，不做研究，对个人和公司都只是短期目标,  当然理论提高了，是需要投产的，不然理论很快沦为&amp;#8221;空想社会主义&amp;#8221;，公司白花银子养活研究部门。&amp;#8221;实践、理论、再实践&amp;#8221;，符合马克思主义哲学思想，也是计 算机学科的价值体现。真正的计算机科学家不是只搞理论的，理论是要应用到产品中的。工程师也不是只做开发不做研究的，是要应用创新，理论微创新。计算机科 学家相比于程序员，主要是数学功底相当深厚，所以他们能在理论上有突破。&lt;br /&gt; &lt;br /&gt; &lt;strong&gt;三、技术、管理两路线。&lt;/strong&gt;&lt;br /&gt; &lt;br /&gt; 1.  &amp;#8220;游戏能玩多深，技术就能做多深&amp;#8221;，这句话说得很好。只因为我们执着，所以在游戏中能攻破一层层难关，凌晨2、3点还能练级打装备。若能走回正道，做技术 就想玩游戏一样，技术做不深才怪呢。走技术路线的人，一定是对技术痴迷的人。但要走得长远，我们需要把技术做穿、做透。如何做穿、做透?计算机底层(C、 汇编、逆向工程、驱动、内核)、计算机算法(网格计算、音视屏压缩、语音识别&amp;#8230;)、架构(软件工程、跨平台、多语言等)都要有涉及。只有我们掌握了这些， 才能做到&amp;#8221;看问题看到本质&amp;#8221;、&amp;#8221;思想有穿透力&amp;#8221;。这些才是最宝贵的，需要沉淀下来，仅仅靠做项目、写代码是无法达到的。&lt;br /&gt; &lt;br /&gt; 2. 对于走管理路线的人，是具有&amp;#8221;完成任务为第一要务&amp;#8221;、&amp;#8221;有计划、善于管理时间&amp;#8221;、&amp;#8221;善于与人打交道&amp;#8221;性格特点的人,  重要的是&amp;#8221;综合素质&amp;#8221;，而不是&amp;#8221;专攻&amp;#8221;。但是这些都是可以改变的，很多公司也会选择技术做得最优秀的人做管理。由于我是一个技术痴迷狂，管理这块，我没有 发言权，不做多解释。&lt;br /&gt; &lt;br /&gt; &lt;strong&gt;四、心态。&lt;/strong&gt;&lt;br /&gt; &lt;br /&gt; 1. 人活在世界上在于奉献而不是索取，帮助别人是一件很快乐的事情, 作为程序员的我们心胸要开阔些，低调些、虚心些,  公司的李老师、老张就是一个心胸很宽广、低调的人，值得学习, 三人行必有我师，我们熟悉的只是自己的这一块、这个领域，不懂的地方要虚心向别人请教,  我见过浮躁、过于自信的人，也见过做人低调的人，发展结果完全不同。&lt;br /&gt; &lt;br /&gt; 2.  乐于分享，支持开源。这是一个很需要心胸、气度的事，也是决定个人、公司发展快慢的重要砝码。技术发展日新月异，总守着自己手中的那点技术，得不到长足的 发展。中国两千年的封建历史、门户关闭政策还不够惨痛吗?&amp;#8221;技术是交流和玩出来的&amp;#8221;,这是锐安龙哥告诉我的。他也是一个大黑客、正义的黑客，开源是黑客的 一项重要精神，所以黑客能引领技术。&lt;br /&gt; &lt;br /&gt; 3.  每日学习。很多人认为毕业了就不用学习了，或者不用那么那么地学习了。这是一个非常非常错误的思想，无论何时何地都要把自己当成菜鸟、应届生地去学习。书 本是学习的一个捷径，Google、百度解决问题是快，但不是系统化地学习。看书要了解作者背后的知识底蕴，想一想这个问题得解决作者是怎么想到的，这样 比单纯解决一个问题更进一层。更重要的是聆听作者的心声，感受大师的心态。最后给大家推荐&amp;#8221;黑客与画家&amp;#8221;这本书，写得真的很好，老吴不提，我还不知道。&lt;/div&gt;&lt;img src="http://www.cnblogs.com/ice5/aggbug/2299236.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ice5/archive/2011/12/23/2299236.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ice5/archive/2011/12/22/2298085.html</id><title type="text">CSDN-中文IT社区-600万.rar-CSDN杯程序员最爱的mm评选</title><summary type="text">CSDN这次丢人丢大了，蒋涛同学现在估计正焦头烂额。 事件始末： 昨天有人将CSDN的2009年4月份以前的用户名和密码发布到了ed2k:网络上了，CSDN-中文IT社区-600万.rar。由于CSDN是采用明文存储，导致600万用户密码集体泄露。 这里有第三方查询密码是否泄露的网站：http://0bad.com/csdn.php 如果您的密码也在泄露之列，请尽快修改，以及其他网站的密码。 该事件出现以后，各路神仙大显身手： 据说现在推上在举行CSDN杯我最喜爱的CSDN密码活动，我觉得与其评选人们最喜爱的密码，还不如评选密码里面最受喜爱的人。那么谁得到的爱最多呢，我统计了一下包含ilove</summary><published>2011-12-22T09:06:00Z</published><updated>2011-12-22T09:06:00Z</updated><author><name>MARTIALIS</name><uri>http://www.cnblogs.com/ice5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ice5/archive/2011/12/22/2298085.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ice5/archive/2011/12/22/2298085.html"/><content type="html">&lt;div&gt;&lt;p&gt;CSDN这次丢人丢大了，蒋涛同学现在估计正焦头烂额。&lt;br /&gt; 事件始末：&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;昨天有人将CSDN的2009年4月份以前的用户名和密码发布到了ed2k:网络上了，CSDN-中文IT社区-600万.rar。由于CSDN是采用明文存储，导致600万用户密码集体泄露。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;这里有第三方查询密码是否泄露的网站：&lt;a href="http://0bad.com/csdn.php" target="_blank"&gt;http://0bad.com/csdn.php&lt;/a&gt; 如果您的密码也在泄露之列，请尽快修改，以及其他网站的密码。&lt;/p&gt; &lt;p&gt;该事件出现以后，各路神仙大显身手：&lt;/p&gt; &lt;p&gt;据说现在推上在举行CSDN杯我最喜爱的CSDN密码活动，我觉得与其评选人们最喜爱的密码，还不如评选密码里面最受喜爱的人。那么谁得到的爱最多呢，我统计了一下包含ilove***的密码，其中被爱得死去活来的前100位如下：&lt;/p&gt; &lt;p&gt;1 you 3567&lt;br /&gt; 2 you1314 110&lt;br /&gt; 3 u 92&lt;br /&gt; 4 csdn 68&lt;br /&gt; 5 you123 57&lt;br /&gt; 6 china 49&lt;br /&gt; 7 you520 43&lt;br /&gt; 8 thisgame 41&lt;br /&gt; 9 java 31&lt;br /&gt; 10 chu 30&lt;br /&gt; 11 123 30&lt;br /&gt; 12 2hcx 29&lt;br /&gt; 13 you1 26&lt;br /&gt; 14 myself 22&lt;br /&gt; 15 you521 22&lt;br /&gt; 16 r 19&lt;br /&gt; 17 jay 19&lt;br /&gt; 18 qsr 18&lt;br /&gt; 19 520 18&lt;br /&gt; 20 1314 18&lt;br /&gt; 21 yan 17&lt;br /&gt; 22 her 16&lt;br /&gt; 23 myfamily 16&lt;br /&gt; 24 mei 15&lt;br /&gt; 25 you88 15&lt;br /&gt; 26 myhome 15&lt;br /&gt; 27 udearbook 15&lt;br /&gt; 28 me 14&lt;br /&gt; 29 y 14&lt;br /&gt; 30 youforever 14&lt;br /&gt; 31 pig 14&lt;br /&gt; 32 jing 14&lt;br /&gt; 33 u1314 13&lt;br /&gt; 34 ujustso 13&lt;br /&gt; 35 linux 13&lt;br /&gt; 36 ling 13&lt;br /&gt; 37 you99 12&lt;br /&gt; 38 ping 12&lt;br /&gt; 39 you2 12&lt;br /&gt; 40 cat 11&lt;br /&gt; 41 angel 11&lt;br /&gt; 42 money 11&lt;br /&gt; 43 ucn 11&lt;br /&gt; 44 dan 11&lt;br /&gt; 45 fang 11&lt;br /&gt; 46 she 11&lt;br /&gt; 47 zhutou 10&lt;br /&gt; 48 you2009 10&lt;br /&gt; 49 kobe 10&lt;br /&gt; 50 apple 10&lt;br /&gt; 51 u123 9&lt;br /&gt; 52 you2008 9&lt;br /&gt; 53 nba 9&lt;br /&gt; 54 wei 9&lt;br /&gt; 55 utmh 9&lt;br /&gt; 56 2008 9&lt;br /&gt; 57 youbaby 9&lt;br /&gt; 58 juan 9&lt;br /&gt; 59 dayu 8&lt;br /&gt; 60 baby 8&lt;br /&gt; 61 1 8&lt;br /&gt; 62 you123456 8&lt;br /&gt; 63 youmydear 8&lt;br /&gt; 64 nana 8&lt;br /&gt; 65 sun 8&lt;br /&gt; 66 miao 8&lt;br /&gt; 67 lily 8&lt;br /&gt; 68 computer 8&lt;br /&gt; 69 yurongguang 8&lt;br /&gt; 70 wen 8&lt;br /&gt; 71 1tmac 7&lt;br /&gt; 72 xin 7&lt;br /&gt; 73 snow 7&lt;br /&gt; 74 rain 7&lt;br /&gt; 75 hui 7&lt;br /&gt; 76 911 7&lt;br /&gt; 77 you11 7&lt;br /&gt; 78 fei 7&lt;br /&gt; 79 ly 7&lt;br /&gt; 80 jun 7&lt;br /&gt; 81 sky 7&lt;br /&gt; 82 1987 7&lt;br /&gt; 83 yuki 7&lt;br /&gt; 84 music 6&lt;br /&gt; 85 mywife 6&lt;br /&gt; 86 lan 6&lt;br /&gt; 87 god 6&lt;br /&gt; 88 dog 6&lt;br /&gt; 89 yang 6&lt;br /&gt; 90 rjjmxy 6&lt;br /&gt; 91 flash 6&lt;br /&gt; 92 money1976* 6&lt;br /&gt; 93 rose 6&lt;br /&gt; 94 moon 6&lt;br /&gt; 95 yao 6&lt;br /&gt; 96 you. 6&lt;br /&gt; 97 fish 6&lt;br /&gt; 98 lin 6&lt;br /&gt; 99 youok 6&lt;br /&gt; 100 you*1314 6&lt;br /&gt; 排序之最统计：&lt;br /&gt; 排在最前的国家是China&lt;br /&gt; 排在最前的网站是csdn&lt;br /&gt; 排在最前的编程语言是Java&lt;br /&gt; 排在最前的操作系统是Linux&lt;br /&gt; 排在最前的电脑品牌是apple&lt;br /&gt; 排在最前的明星是周杰伦&lt;/p&gt; &lt;p&gt;flash在前100强，html5并没有 钱在程序员眼中甚至排在了 猫 的后面&lt;/p&gt; &lt;p&gt;排在最前的动物分别是：&lt;br /&gt; 1. 猪&lt;br /&gt; 2. 猫&lt;br /&gt; 3. 猪头&lt;br /&gt; 4. 狗&lt;/p&gt; &lt;p&gt;排在最前的mm名字是&lt;br /&gt; 1：yan（燕）&lt;br /&gt; 2：mei（梅）&lt;br /&gt; 3：jing（静）&lt;br /&gt; 4：ling（玲）&lt;br /&gt; 5：ping（萍）&lt;br /&gt; 6：dan（丹，这个是不是mm我表示存疑）&lt;br /&gt; 7：fang（芳）&lt;br /&gt; 8：wei（薇）&lt;br /&gt; 9：juan（娟）&lt;br /&gt; 10：nana（娜娜）&lt;/p&gt; &lt;p&gt;恭喜上面的姑娘，你们是程序员眼里最可爱的人。&lt;br /&gt; 也许你们觉得他们长得像密码，但他们将你们写在密码里。&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/ice5/aggbug/2298085.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ice5/archive/2011/12/22/2298085.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ice5/archive/2011/12/22/2297986.html</id><title type="text">2011年九大热门语言发展趋势</title><summary type="text">2010年末，Robert Diana写了一篇2011年需要关注的9大编程语言。现在2011年即将结束了，让我们来看看这些语言在这一年中发生了什么变化。（注意，所选的这些语 言是作者希望他们的发展能有所变动，不管排名是上升还是下降。因此，这里并没有Java、Ruby、Python或者Objective-C等这些热门语 言。） 首先，让我们回顾下2011年初对这些语言的发展展望： • Lua——在GitHub和StackOverflow上，这门语言比较活跃。它在Tiobe上的排名也比较稳定，但是，更加重要的是，Lua的职位越来越多了。对于Lua来说，目前的趋势表明Lua将会成为主流的编程语言。.</summary><published>2011-12-22T08:08:00Z</published><updated>2011-12-22T08:08:00Z</updated><author><name>MARTIALIS</name><uri>http://www.cnblogs.com/ice5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ice5/archive/2011/12/22/2297986.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ice5/archive/2011/12/22/2297986.html"/><content type="html">&lt;div&gt;&lt;p&gt;2010年末，Robert  Diana写了一篇2011年需要关注的9大编程语言。现在2011年即将结束了，让我们来看看这些语言在这一年中发生了什么变化。（注意，所选的这些语 言是作者希望他们的发展能有所变动，不管排名是上升还是下降。因此，这里并没有Java、Ruby、Python或者Objective-C等这些热门语 言。）&lt;/p&gt; &lt;p&gt;首先，让我们回顾下2011年初对这些语言的发展展望：&lt;/p&gt; &lt;p&gt;&amp;#8226; Lua&amp;#8212;&amp;#8212;在GitHub和StackOverflow上，这门语言比较活跃。它在Tiobe上的排名也比较稳定，但是，更加重要的是，Lua的职位越来越多了。对于Lua来说，目前的趋势表明Lua将会成为主流的编程语言。&lt;/p&gt; &lt;p&gt;&amp;#8226; R &amp;#8212;&amp;#8212;数据分析和大数据处理逐渐成为每个Web站点不可分割的一部分，处理这些数据群的语言也逐渐流行起来了。和R语言有关的职位需求也是相当有趣。&lt;/p&gt; &lt;p&gt;&amp;#8226; Clojure &amp;#8212;&amp;#8212;虽然在Tiobe的排行榜中，Clojure并不是很流行，但是，在某些编程领域中，它是很流行的。它的职位需求趋势的增长表明，在明年，它的接受程度会大大增加。&lt;/p&gt; &lt;p&gt;&amp;#8226; Go&amp;#8212;&amp;#8212;只有Tiobe把它当成一门流行的语言。在Dataist Tier中，它的排名并不好，而且职位需求趋势也不是十分可靠。但是，对于它的&amp;#8220;娘家&amp;#8221;Google来说，它可能不需要纯粹的，系统化的增长。&lt;/p&gt; &lt;p&gt;&amp;#8226; Erlang&amp;#8212;&amp;#8212;这门语言已经诞生好几年了，在各个领域发展的都不错。随着像XMPP（确切地说应该是eJabberd），PubSubHubbub那样的实时技术的持续增长，2011年，它的排名可能仅次于Python。&lt;/p&gt; &lt;p&gt;&amp;#8226; Scala&amp;#8212;&amp;#8212;这将是最有趣的趋势之一。在Dataist  Tier中，Scala表现的很好，但是它没有排到Tiobe的目录中。Scala的职位需求正在稳步地增长，使用者（例如：Twitter）也在日渐增 多，在明年，Scala的接受程度可能会得到极大地提高。&lt;/p&gt; &lt;p&gt;&amp;#8226; Groovy&amp;#8212;&amp;#8212;无论如何，我认为Groovy已经错失良机了。它是一门坚实的脚本语言，它的职位需求的增长情况也不错，但是它如何把它自己和Ruby, Python, Erlang 和 Scala区分开来呢？&lt;/p&gt; &lt;p&gt;&amp;#8226; Scheme&amp;#8212;&amp;#8212;无论何种原因，这门语言都不肯&amp;#8220;离去&amp;#8221;，实际上，它又引起了大家一些兴趣。它的职位需求的增长情况不容乐观，在它第一次&amp;#8220;大爆发&amp;#8221;以后已经至少过去30年了，明年，我们可能也不会看到它的第二次&amp;#8220;大爆发&amp;#8221;。&lt;/p&gt; &lt;p&gt;&amp;#8226; ActionScript&amp;#8212;&amp;#8212;ActionScript之所以包含在这个列表里是因为它在Tiobe 和 Dataist Tier的排名都很高。但是，这门语言的就业趋势并不好。可能它的&amp;#8220;热度&amp;#8221;正在退去，所以在明年，你也应该留意一下这门语言。&lt;/p&gt; &lt;p&gt;那么，在2011年这些语言究竟发展的如何呢？从就业趋势能反应出企业的需求度。值得注意的是，职位需求数据表明了想要去抓住语言开发是很困难的。图中Go和R语言没有出现在列表里，因为很难找到合适的岗位需求，而Scheme依然在列表里，它的需求发展缓慢。&lt;/p&gt; &lt;p&gt;首先，让我们看一看来自于&lt;strong&gt;Indeed.com的职位需求趋势图：&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;img size-full=""  wp-image-39021"="" title="1" src="http://tech2ipo.com/wp-content/uploads/2011/12/18.png" alt="" height="300" width="540" /&gt;&lt;/p&gt; &lt;p&gt;编程语言职位需求趋势&lt;/p&gt; &lt;p&gt;如图所示，ActionScript持续下滑，且下降的趋势较为明显。Scheme在缓慢地增长，相对而言发展比较稳定，没有多大浮动。 Groovy在过去几年里呈现稳健增长趋势，Scala的需求似乎在迅速增加。Lua仅呈现小幅度增长，超过了Erlang和Clojure。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;编程语言职位增长趋势图：&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;img size-full=""  wp-image-39023"="" title="2" src="http://tech2ipo.com/wp-content/uploads/2011/12/211.png" alt="" height="270" width="486" /&gt;&lt;/p&gt; &lt;p&gt;编程语言职位增长趋势图&lt;/p&gt; &lt;p&gt;从图中我们可以看到，Lua和Clojure呈爆炸性的增长趋势，但是还没有转化成大量的职位需求。与此同时，发展迅速的还有Scala、Erlang和Groovy。与之相比，Scheme和ActionScript却无明显变化。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;九大编程语言在2011年这一年里的发展情况：&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;先看看TIOBE 2010年12月编程语言排行榜和TIOBE 2011年12月编程语言排行榜的对比。此外，还可以从GitHub和StackOverflow上获得更多的信息。&lt;/p&gt; &lt;p&gt;1.Go （Tiobe排名：34  浮动：-13）：在TIOBE排行榜上下降13位，在StackOverflow和GitHub上活跃度有所减少。尽管是Google推出的本土语言，但 似乎并未获得更多的主流关注。两年前Google的一个小组公开了他们的孵化项目&amp;#8212;&amp;#8212;Go编程语言。如今Go语言发布两周年，谷歌将在明年初推出Go语言 首个正式版本1.0，Go将帮助程序员开发更大的系统。&lt;/p&gt; &lt;p&gt;2.R（Tiobe排名：24  浮动：+2）：TIOBE排名只上升2位，在GitHub和StackOverflow上也无明显变化。鉴于R不是一种通用语言，其受欢迎程度还是有些令 人惊讶的。R作为开源的数据统计分析语言正潜移默化的在企业中扩大自己的影响力。特有的扩展插件可提供免费扩展，并且允许R语言引擎运行在Hadoop集 群之上。不仅如此，R语言还提供对64位数据处理的支持。&lt;/p&gt; &lt;p&gt;3.Lua（Tiobe排名：21  浮动：+6）：TIOBE排名上升6位，但在GitHub和StackOverflow上有所下降。不过，其职位需求趋势很好。所以，我们应该继续观望 Lua在下一年的发展。历经近两年的漫长开发流程后，Lua终于发布了5.2正式版。很多应用程序使用LUA作为自己的嵌入式脚本语言，以此来实现可配置 性、可扩展性。这其中包括《魔兽世界》、《博德之门》以及大名鼎鼎的《愤怒的小鸟》等。&lt;/p&gt; &lt;p&gt;4.Scheme（Tiobe排名：30 浮动：-1）：毫无疑问，在TIOBE上没有太大变化。在GitHub和StackOverflow上也同样如此，伴随着其他语言的增长趋势，对Scheme的需求似乎也不大。&lt;/p&gt; &lt;p&gt;5.ActionScript（Tiobe排名：50&amp;#8211;100  浮动：-&amp;gt;13）：可以看到，ActionScript下跌幅度之大，在TIOBE上排名在从50滑落至100。职位需求呈下降趋势，在 StackOverflow和GitHub上活跃度没有多大改变。可以料想，ActionScript在2012年发展不容乐观。&lt;/p&gt; &lt;p&gt;6.Erlang（Tiobe排名：29  浮动：20）：今年最大的获益者莫过于Erlang，它在TIOBE排名上升20位，这一增长趋势与StackOverflow and  GitHub上似乎不大匹配。职位趋势出现积极迹象，所以，我们该留意下这门语言。想学习Erlang语言吗？Erlang之父教你如何入手。&lt;/p&gt; &lt;p&gt;7.Groovy（Tiobe排名：45  浮动：&amp;gt;5）：TIOBE排名出现在前50名之内。在StackOverflow和GitHub上活跃度也有所提升。它的职位需求的增长情况也不 错，发展较为稳定。Groovy官方没有做任何说明为什么要修改授权协议，只是简单的提了Groovy的授权协议改为Apache。不知道是否有意向转到 Apache组织，不得而知。&lt;/p&gt; &lt;p&gt;8.Scala (Tiobe排名： 50-100  浮动：0)：鉴于Scala在TIOBE排名上盘旋于50-100之间，我们无法预料它的增长趋势。总的来说，在StackOverflow和 GitHub上活跃度也无明显变化。但从职位需求趋势上显示了肯定了它的增长速度。今年Google推出C++ Go Java  Scala的基准性能测试，Scala性能要快于Java，报告推出时也恰逢Scala Day，所以对Scala有特别意义。&lt;/p&gt; &lt;p&gt;9.Clojure (Tiobe排名： 50-100 浮动：+？)  ：Clojure从100上升到50-100之间，呈稳定增长趋势，奇怪的是在StackOverflow和GitHub上活跃度不明显。从它的职位需求 趋势来看不是很乐观，但它的增长趋势确实很理想。Closure在2012年势必将大有作为。&lt;/p&gt; &lt;p&gt;那么，在2012年各编程语言又会有怎样的发展呢？让我们拭目以待吧。我知道大家会有很多的意见和想法，欢迎您在评论中列出。&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/ice5/aggbug/2297986.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ice5/archive/2011/12/22/2297986.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ice5/archive/2011/12/22/2297982.html</id><title type="text">2011年IT 领域最大的赢家和输家</title><summary type="text">2011年，多少家企业被推向了互联网的浪潮之巅，又有多少家企业在这次浪潮中慢慢退出历史舞台…… 纵观一年来发生的科技大事，能够发现其中有众多赢家，但也有不少输家。今天，就让我们总结一下这一年中各种事件的主角。赢家一：Amazon不管Kindle Fire有多少缺点，它成为最受欢迎平板已是不争的事实。而且在Kindle Fire的光芒下，整个Kindle系列的销量也节节攀升。Amazon已经不仅仅是一个购物网站，它是一个集成了购物、生活、影音、娱乐等服务的联合体，以至于人们的大部分消费都可在Amazon上完成。输家：实体零售商受到互联网的冲击，传统零售商的日子越来越难。而Amazon可以说是罪魁</summary><published>2011-12-22T08:06:00Z</published><updated>2011-12-22T08:06:00Z</updated><author><name>MARTIALIS</name><uri>http://www.cnblogs.com/ice5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ice5/archive/2011/12/22/2297982.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ice5/archive/2011/12/22/2297982.html"/><content type="html">&lt;div&gt;&lt;p&gt;2011年，多少家企业被推向了互联网的浪潮之巅，又有多少家企业在这次浪潮中慢慢退出历史舞台&amp;#8230;&amp;#8230; 纵观一年来发生的科技大事，能够发现其中有众多赢家，但也有不少输家。今天，就让我们总结一下这一年中各种事件的主角。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;赢家一：Amazon&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.36kr.com/p/70685.html/amazon" rel="attachment wp-att-70770"&gt;&lt;img size-full=""  wp-image-70770"="" title="Amazon" src="http://img02.36krcnd.com/wp-content/uploads/2011/12/Amazon.jpg" alt="" height="271" width="494" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;不管&lt;a href="http://www.36kr.com/tag/kindle-fire"&gt;Kindle Fire&lt;/a&gt;有多少缺点，它成为最受欢迎平板已是不争的事实。而且在Kindle Fire的光芒下，整个Kindle系列的销量也节节攀升。&lt;a href="http://www.36kr.com/tag/amazon"&gt;Amazon&lt;/a&gt;已经不仅仅是一个购物网站，它是一个集成了购物、生活、影音、娱乐等服务的联合体，以至于人们的大部分消费都可在Amazon上完成。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;输家：实体零售商&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;受到互联网的冲击，传统零售商的日子越来越难。而Amazon可以说是罪魁祸首，今年这种情况变得更加严重。不知对于那些小型的零售商来说，未来还能撑多久？&lt;/p&gt;&lt;p&gt;&lt;strong&gt;赢家二：苹果&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.36kr.com/p/70685.html/apple" rel="attachment wp-att-70774"&gt;&lt;img size-full=""  wp-image-70774"="" title="apple" src="http://img03.36krcnd.com/wp-content/uploads/2011/12/apple.jpg" alt="" height="338" width="450" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;乔布斯的去世，或许是&lt;a href="http://www.36kr.com/tag/apple"&gt;苹果&lt;/a&gt;最 大的损失。但不管怎样，今年又是苹果的一个胜利之年。尽管人们对iPhone4s有些不满，但iPad 2、iPhone  4s还是让苹果赚得盆满钵盈。iPad 的总销量已超过4000万台，iPhone 4s 的Siri  也受到大众的热烈追捧，甚至连《史蒂夫&amp;#183;乔布斯传》上市仅一个半月，就登上了&lt;a href="http://www.36kr.com/p/65682.html"&gt;Amazon 2011最畅销书籍的冠军宝座&lt;/a&gt;。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;输家：我们&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;对 于我们来说，苹果的产品对得起它那高高在上的价格，买了苹果的东西之后我们不会后悔。那么我们到底失去了什么？是的，乔布斯。不管怎样，乔布斯给人类带来 的福利有着十分重大的意义。面对他的离去，我们却什么都不能做，只能在心中祈祷：&amp;#8220;Jobs Bless Apple。&amp;#8221;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;赢家三：IBM&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.36kr.com/p/70685.html/ibm" rel="attachment wp-att-70775"&gt;&lt;img size-full=""  wp-image-70775"="" title="ibm" src="http://img04.36krcnd.com/wp-content/uploads/2011/12/ibm.jpg" alt="" height="212" width="450" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;当&lt;a href="http://www.36kr.com/tag/ibm"&gt;IBM&lt;/a&gt;将 个人电脑业务卖给联想之后，它就在人们的视线中慢慢消失了。但这并不代表IBM的没落，从某种意义上讲，反而是一种重生。今年的IBM，无论是在硬件制造 领域、云计算领域、企业服务领域还是新能源领域，都成为了最大的赢家。只是IBM和普通大众已没有多少关系，人们已不再关注这个蓝色巨人。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;输家：惠普&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;和IBM恰恰相反，&lt;a href="http://www.36kr.com/tag/hp"&gt;惠普&lt;/a&gt;本 来也可以成功转型。但由于其紧紧抓住个人电脑市场不放，现在已经被WebOS从高速列车上拉了下来。HP  Touchpad今年夏天登陆市场，不到三个月的时间，就已无人问津。随后便出现了让人哭笑不得的99美元大甩卖，虽然很快就被消费者抢购一空，但对惠普 来说事实已无法改变。而最近惠普宣布将WebOS开源，未来如何发展尚不得而知。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;赢家四：Android&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.36kr.com/p/70685.html/android-4" rel="attachment wp-att-70776"&gt;&lt;img size-full=""  wp-image-70776"="" title="android" src="http://img05.36krcnd.com/wp-content/uploads/2011/12/android.jpg" alt="" height="371" width="450" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;毫 无疑问，2011年无疑是Android的胜利之年。无数的智能手机和平板电脑都搭载Android系统，为Android的推广做出了巨大贡献。对于苹 果来说，可能只有iPad2和iPhone4s发布的那天是值得庆贺的，但对于Android来说，几乎每一天都值得庆贺。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;输家：大部分的Android平板发行商&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;尽管Android系统已是铺天盖地，但对于Android平板发行商来说，现实并不乐观。像三星的&lt;a href="http://www.36kr.com/tag/galaxy-tab"&gt;Galaxy&lt;/a&gt;、摩托罗拉的&lt;a href="http://www.36kr.com/tag/xoom"&gt;Xoom&lt;/a&gt;、黑莓的&lt;a href="http://www.36kr.com/tag/playbook"&gt;Playbook&lt;/a&gt;等都没有良好的业绩表现，可能唯一一个表现不错的就是Amazon的Kindle Fire了。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;赢家五：Google&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.36kr.com/p/70685.html/google1" rel="attachment wp-att-70777"&gt;&lt;img size-full=""  wp-image-70777"="" title="google+1" src="http://img01.36krcnd.com/wp-content/uploads/2011/12/google+1-.jpg" alt="" height="232" width="439" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Android 是Google成为今年赢家的一个原因，但最大的原因是另一个：Google + 。最初，Google  +曾一度被唱衰。即使现在，还是有很多人不看好它。但没关系，有Google这个搜索巨头做靠山，再烂的产品也能让每个人都接受它。正如现在国外的每个网 站、每篇文章、每个连接旁都有那个&amp;#8220;+1&amp;#8221;按钮一样，这也算是Google最大的成功了。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;输家：RIM&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;同样都擅长信息处理，但&lt;a href="http://www.36kr.com/tag/rim"&gt;RIM&lt;/a&gt;这 个不到三十年的无线通信巨头已经日渐式微了。和惠普一样，也是一个平板，让这个昔日巨人的缺点一一暴露出来。两位CEO，拉扎里迪斯和贝尔斯利，一个负责 整体战略，一个负责产品研发。但在公司僵化的体制下，RIM的一切行动都显得苍白无力。即使他们的年薪都降到1美元，恐怕也只能是&amp;#8220;1+1=0&amp;#8221;。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;赢家六：云计算&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.36kr.com/p/70685.html/cloud-4" rel="attachment wp-att-70780"&gt;&lt;img size-full=""  wp-image-70780"="" title="CLOUD" src="http://img02.36krcnd.com/wp-content/uploads/2011/12/cloud-computer2.jpg" alt="" height="237" width="464" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Amazon、Google、&lt;a href="http://www.36kr.com/tag/salesforce"&gt;Salesforce&lt;/a&gt;、 Apple都在云计算上不断发力，使得2011年成为了云计算最火的一年。Amazon的AWS（Amazon&amp;nbsp;Web  Services）今年营收估计将达到9亿美元，而利润率高达23%。Google App  Engine受众更广，几乎绝大部分中小网站都会用到它。另外IBM、微软都已进入云计算市场，未来将会是云的天下。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;输家：索尼&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;可能人们并没注意到，&lt;a href="http://www.36kr.com/tag/sony"&gt;索尼&lt;/a&gt;正在慢慢远离大众消费者。不管是索尼笔记本、影音技术、游戏机还是电视，都在慢慢的退居二线。而索尼爱立信的分道扬镳，使得索尼的困境雪上加霜。未来索尼将&lt;a href="http://www.36kr.com/p/69097.html"&gt;走向何方&lt;/a&gt;？我们将拭目以待。&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/ice5/aggbug/2297982.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ice5/archive/2011/12/22/2297982.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ice5/archive/2010/08/22/1805998.html</id><title type="text">Asp.net的局部缓存[转]</title><summary type="text">页面缓存 使用OutputCache指令。 &lt;%@OutputCacheDuration="3600" Location="Any" VaryByCustom="browser" VaryByParam="RequestID"%&gt; 其中Duration和VaryByParam特性是必须的。 Location控制页面缓存的位置 Location 含义 Any 默认值。意味着页面的输出可...</summary><published>2010-08-22T14:44:00Z</published><updated>2010-08-22T14:44:00Z</updated><author><name>MARTIALIS</name><uri>http://www.cnblogs.com/ice5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ice5/archive/2010/08/22/1805998.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ice5/archive/2010/08/22/1805998.html"/><content type="html">&lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;strong&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;页面缓存&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;使用OutputCache指令。&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;&amp;lt;%@&amp;nbsp;OutputCache&amp;nbsp;Duration="3600"&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Location="Any"&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VaryByCustom="browser"&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VaryByParam="RequestID"&amp;nbsp;%&amp;gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;其中Duration和VaryByParam特性是必须的。&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;Location&lt;/span&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;控制页面缓存的位置&lt;/span&gt;&lt;/div&gt; &lt;table border="1" cellpadding="0" cellspacing="0"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="top" width="108"&gt;             &lt;div align="center"&gt;&lt;span style="font-size: 9pt;"&gt;Location&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;             &lt;td valign="top" width="396"&gt;             &lt;div align="center"&gt;&lt;span style="font-size: 9pt;"&gt;含义&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="108"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;Any&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;             &lt;td valign="top" width="396"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;默认值。意味着页面的输出可以缓存在客户端浏览器，缓存在任何&amp;#8220;下游&amp;#8221;的客户端（如代理服务器），或缓存在Web服务器本身&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="108"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;Client&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;             &lt;td valign="top" width="396"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;指明输出缓存只能存储在发出请求的客户端（即浏览器）的本地缓存中&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="108"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;Downstream&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;             &lt;td valign="top" width="396"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;指明输出缓存能存储在任何支持HTTP1.1缓存的设备（如代理服务器）中&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="108"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;Server&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;             &lt;td valign="top" width="396"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;指明输出缓存将存储在Web服务器上&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="108"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;None&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;             &lt;td valign="top" width="396"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;指明该页面禁用输出缓存&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;         &lt;/tr&gt;     &lt;/tbody&gt; &lt;/table&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;Duration&lt;/span&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;允许我们控制页面在缓存中生存的时间（单位是秒）&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;VaryByParam&lt;/span&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;允 许我们缓存页面的不同版本。在上面的例子中，VaryByParam设为了RequestID，所以ASP.NET使用RequestID参数的不同值， 这些值或者是在HTTP&amp;nbsp;GET的查询字符串中传入，或者是在HTTP&amp;nbsp;POST的参数中传入。可以通过检查RequestID参数的值让应用程序区分不 同的用户；通过在页面的OutputCache指令中放置VaryByParam＝"RequestID"，可以让ASP.NET为每个用户缓存页面的不 同版本。&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;如果不想根据参数的值缓存页面的不问版本，那么只要把VaryByParam设为none。&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;也可以要求ASP.NET为每个可能的参数组合缓存页面的一个版本。为此，可把VaryByParam设为*。&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;VaryByHeader&lt;/span&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;和VaryByCustom特性与VaryByParam的相似之处在于，它们允许指定何时应创建页面新的缓存版本。&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;VaryByHeader&lt;/span&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;允许我们根据由分号分隔的HTTP头的列表末缓存页面的不向版本。&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;VaryByCustom&lt;/span&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;当设为browser时，允许我们根据浏览器的名称和主版本信息缓存不同版本。也可以把它设为一个自定义方法的名称，从而实现我们自己的逻辑，控制缓存的版本。&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;strong&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;片断缓存&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;可 以利用用户控件将页面分段，在ascx文件中写入缓存的语句，而不在aspx文件中写缓存语句，这样ASP.NET就可以只缓存ascx片断的输出了。一 般像页眉或页脚基本上都是一样的，就不需要重新加载。但是如果其中有动态变化的数据就不能对其进行缓存，因为一旦被缓存后程序就不会再创建它的实例来更新 数据显示，只有等到生存期过期才行，所以对于这种情况就不适于用页面片断缓存。&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;注意：&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;一、注意片段缓存不支持Location特性；缓存页面片段惟一合法的地方是web服务器。这是因为片段缓存在ASP.NET中是新的功能，所以浏览器和代理服务器不支持。&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;二、片段缓存有另外一个在页面缓存中没有的特性&amp;#8212;&amp;#8212;VaryByControl。VaryByControl特性允许指定一个由分号分隔的字符串列表，代表用户控件内使用的控件的名称；ASP.NET将针对值的每个不同的组合生成用户构件的一个缓存版本。&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;strong&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;数据缓存&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;低 级API是Cache类，它位于ASP.NET中的System.web.Caching命名空间，可以用它缓存生成很耗费资源的数据。Cache类的使 用和Session与Application对象一样简单。每个应用程序只有一个Cache对象&amp;#8212;&amp;#8212;这意味着使用Cache对象存储在缓存中的数据是应用 程序级别的数据。使事情更为简单的是，Page类的Cache属性使应用程序的Cache对象实例能在代码中使用。&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;通 过Cache对象缓存的数据存储在应用程序的内存中。这意味着该数据的生存期不会超过应用程序的重启(事实上，这和存储在Application与 Session对象中的数据一样，除非使用StateService或SQL&amp;nbsp;State会话模式存储Session数据)。&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;具体的使用和语法与Session和Application一样。转换回来的时候需要注意对其进行相应类型的强制类型转换。&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;这不是在ASP.NET缓存中添加缓存项的惟一方式。Cache对象有两个方法Insert()方法和Add()方法，它们灵活性更高。它们的用法近似，但稍有不同：&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;Insert()&lt;/span&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;方法用于覆盖ASP.NET缓存中现有的缓存项。&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;Add()&lt;/span&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;方法只用于在ASP.NET缓存中添加新的缓存项(如果用它覆盖现有的缓存项，则会失败)。&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;每个方法都有7个参数，而且两个方法的参数相同。&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;在缓存某一项时，可以指定它的相关性，告诉ASP.NET该缓存项在缓存中一直保留到某个事件发生时为止。&lt;/span&gt;&lt;/div&gt; &lt;table border="1" cellpadding="0" cellspacing="0" width="492"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="top" width="168"&gt;             &lt;div align="center"&gt;&lt;span style="font-size: 9pt;"&gt;相关性值&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;             &lt;td valign="top" width="324"&gt;             &lt;div align="center"&gt;&lt;span style="font-size: 9pt;"&gt;含义&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="168"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;CacheDependency&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;             &lt;td valign="top" width="324"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;允许指定一个文件或缓存键。如果文件发生变化，对象就被删除。如果缓存键发生变化，对象也被删除。&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="168"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;DateTime&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;             &lt;td valign="top" width="324"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;这是一个DataTime值，指明缓存数据过期的时间（绝对过期时间）&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="168"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;TimeSpan&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;             &lt;td valign="top" width="324"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;这是一个时间间隔，指明缓存数据在上一次访问后可以在缓存中保留多长时间（弹性过期时间）&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;         &lt;/tr&gt;     &lt;/tbody&gt; &lt;/table&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;使用CacheItemPriority来指定缓存数据的优先级，以便在缓存被填满的时候删除那些优先级低的数据。&lt;/span&gt;&lt;/div&gt; &lt;table border="1" cellpadding="0" cellspacing="0" width="492"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="top" width="168"&gt;             &lt;div align="center"&gt;&lt;span style="font-size: 9pt;"&gt;优先级值&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;             &lt;td valign="top" width="324"&gt;             &lt;div align="center"&gt;&lt;span style="font-size: 9pt;"&gt;含义&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="168"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;High&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;             &lt;td valign="top" width="324"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;设为此优先级的缓存项是最不可能在内存不足时被删除的&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="168"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;AboveNormal&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;             &lt;td valign="top" width="324"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;设为此优先级的缓存项比优先级为Normal或以下的缓存项更优先保留&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="168"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;Normal&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;             &lt;td valign="top" width="324"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;设为此优先级的缓存项比优先级为BelowNormal和Low的缓存项更优先保留&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="168"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;BelowNormal&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;             &lt;td valign="top" width="324"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;这是倒数第二级的优先级；设为此优先级的缓存项只比优先级设为Low的缓存项更优先保留&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="168"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;Low&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;             &lt;td valign="top" width="324"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;设为此优先级的缓存项是最有可能在内存不足时被删除的&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="168"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;Default&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;             &lt;td valign="top" width="324"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;缓存项的优先级的默认值是Normal&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="168"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;NotRemovable&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;             &lt;td valign="top" width="324"&gt;             &lt;div align="left"&gt;&lt;span style="font-size: 9pt;"&gt;当缓存项设为此优先级时，是在告诉ASP.NET即使是内存不足，也不要从缓存中删除它&lt;/span&gt;&lt;/div&gt;             &lt;/td&gt;         &lt;/tr&gt;     &lt;/tbody&gt; &lt;/table&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;DateTime&amp;nbsp;dt&amp;nbsp;&lt;span style="color: fuchsia;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;DateTime(DateTime&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;Now&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;Year,&lt;span style="color: red;"&gt;12&lt;/span&gt;,&lt;span style="color: red;"&gt;31&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;Cache&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;Add(&lt;span style="color: purple;"&gt;"MembersDataSet"&lt;/span&gt;,dsMembers,&lt;span style="color: blue;"&gt;null&lt;/span&gt;,&lt;/span&gt;&lt;/div&gt; &lt;div align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;dt,TimeSpan&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;Zero,&lt;/span&gt;&lt;/div&gt; &lt;div align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;CacheItemPriority&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;Normal,&lt;span style="color: blue;"&gt;null&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;第一个参数是引用缓存对象的键，第二个参数是要缓存的对象。第三个参数是null(表明没有相关性)。&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;第 四和第五个参数是绝对的过期时间和弹性的过期时间。这里，我们指定缓存应在当前年份的最后一天过期(dt)。我们想指定没有弹性的过期时间，所以第五个参 数使用TimeSpan.Zero。第六个参数使用System.Web.Caching.CacheItemPriority枚举中的一个值，把优先级 设为Normal。&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;指定一个5分钟的弹性过期时间，没有指定绝对过期时间&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;Cache&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;Add(&lt;span style="color: purple;"&gt;"MembersDataSet"&lt;/span&gt;,dsMembers,&lt;span style="color: blue;"&gt;null&lt;/span&gt;,&lt;/span&gt;&lt;/div&gt; &lt;div style="line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DateTime&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;MaxValue,TimeSpan&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;FromMinutes(&lt;span style="color: red;"&gt;5&lt;/span&gt;),&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CacheItemPriority&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;Normal,&lt;span style="color: blue;"&gt;null&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;添加一个相关性。在这个例子中，过期时间也取决于一个文件的修改，即test.xml文件：&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;CacheDependency&amp;nbsp;dep&amp;nbsp;&lt;span style="color: fuchsia;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;CacheDependency(&lt;span style="color: purple;"&gt;@"C:\test.xml"&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;Cache&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;Add(&lt;span style="color: purple;"&gt;"MembersDataSet"&lt;/span&gt;,dsMembers,dep,&lt;/span&gt;&lt;/div&gt; &lt;div style="line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DateTime&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;MaxValue,TimeSpan&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;FromMinutes(&lt;span style="color: red;"&gt;5&lt;/span&gt;),&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CacheItemPriority&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;Normal,&lt;span style="color: blue;"&gt;null&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;过期时间取决于缓存中另一项的修改：&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;String[]&amp;nbsp;dependencyKeys&amp;nbsp;&lt;span style="color: fuchsia;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;String[&lt;span style="color: red;"&gt;1&lt;/span&gt;];&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;dependencyKeys[&lt;span style="color: red;"&gt;0&lt;/span&gt;]&amp;nbsp;&lt;span style="color: fuchsia;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: purple;"&gt;"MembersChanged"&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;CacheDependency&amp;nbsp;dependency&amp;nbsp;&lt;span style="color: fuchsia;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;CacheDependency(&lt;span style="color: blue;"&gt;null&lt;/span&gt;,&amp;nbsp;dependencyKeys);&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;Cache&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;Add(&lt;span style="color: purple;"&gt;"MembersDataSet"&lt;/span&gt;,dsMembers,dependency,&lt;/span&gt;&lt;/div&gt; &lt;div style="line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DateTime&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;MaxValue,TimeSpan&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;Zero,&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CacheItemPriority&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;Normal,&lt;span style="color: blue;"&gt;null&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;最后一个参数是CacheItemRemovedCallback类型的，允许我们在缓存项从缓存中删除时要求通知，可以编写一个自定义的方法(像这里的ItemRemovedCallback()方法)，然后在第7个参数中指定该方法：&lt;/span&gt;&lt;/div&gt; &lt;div style="line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;ItemRemovedCallback(String&amp;nbsp;key,&amp;nbsp;Object&amp;nbsp;&lt;span style="color: blue;"&gt;value&lt;/span&gt;,&amp;nbsp;CacheItemRemovedReason&amp;nbsp;reason)&lt;/span&gt;&lt;/div&gt; &lt;div style="line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;/div&gt; &lt;div style="line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;Cache&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;Add(&lt;span style="color: purple;"&gt;"MembersDataSet"&lt;/span&gt;,dsMembers,dependency,&lt;/span&gt;&lt;/div&gt; &lt;div style="line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DateTime&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;MaxValue,TimeSpan&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;FromMinutes(&lt;span style="color: red;"&gt;5&lt;/span&gt;),&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CacheItemPriority&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;Normal,&lt;/span&gt;&lt;/div&gt; &lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 150%;"&gt;new&lt;/span&gt;&lt;span style="font-size: 10pt; line-height: 150%;"&gt;&amp;nbsp;CacheItemRemovedCallback(&lt;span style="color: blue;"&gt;this&lt;/span&gt;&lt;span style="color: fuchsia;"&gt;.&lt;/span&gt;ItemRemovedCallback());&lt;/span&gt;&lt;/div&gt; &lt;div style="text-indent: 21pt; line-height: 150%;" align="left"&gt;&lt;span style="font-size: 9pt; line-height: 150%;"&gt;第一个参数是在缓存中存储缓存项时使用的键，第二个是存储的对象本身，第三个是缓存项删除的原因。&lt;/span&gt; &lt;br /&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/ice5/aggbug/1805998.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ice5/archive/2010/08/22/1805998.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ice5/archive/2010/07/06/1772361.html</id><title type="text">c#实现打印</title><summary type="text">在windows应用程序中文档的打印是一项非常重要的功能，在以前一直是一个非常复杂的工作,Microsoft .net Framework的打印功能都以组件的方式提供，为程序员提供了很大的方便，但是这几个组件的使用还是很复杂的，有必要解释一下。打印 操作通常包括以下四个功能1 打印设置 设置打印机的一些参数比如更改打印机驱动程序等2 页面设置 设置页面大小纸张类型等3 打印预览 类似于word...</summary><published>2010-07-06T10:36:00Z</published><updated>2010-07-06T10:36:00Z</updated><author><name>MARTIALIS</name><uri>http://www.cnblogs.com/ice5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ice5/archive/2010/07/06/1772361.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ice5/archive/2010/07/06/1772361.html"/><content type="html">&lt;span&gt;在windows应用程序中文档的打印是一项非常重要的功能，在以前一直是一个非常复杂的工作,Microsoft .net  Framework的打&lt;br /&gt;印功能都以组件的方式提供，为程序员提供了很大的方便，但是这几个组件的使用还是很复杂的，有必要解释一下。&lt;br /&gt;打印 操作通常包括以下四个功能&lt;br /&gt;1 打印设置 设置打印机的一些参数比如更改打印机驱动程序等&lt;br /&gt;2 页面设置 设置页面大小纸张类型等&lt;br /&gt;3  打印预览 类似于word中的打印预览&lt;br /&gt;4 打印 &lt;br /&gt;&lt;br /&gt;下面我把我编写的记事本（全部源代码可以在 http://www.cndot.net中下载）中用到的打印功能的代码进行解释希望能给大家一些帮助&lt;br /&gt;实现打印功能的核心是 PrintDocument类这个类属于System.Drawing.Printing名字空间这个类封装了当前的打印设置页面设置以及所&lt;br /&gt;有的 与打印有关的事件和方法&lt;br /&gt;这个类包括以下几个属性 事件 和方法&lt;br /&gt;1、PrinterSettings 属性&lt;br /&gt;&amp;nbsp;&amp;nbsp;存放打印机的设置信 息这个属性不需要程序员设置因为它是由打印对话框获取的 &lt;br /&gt;2、PrintCountroller 属性 &lt;br /&gt;&amp;nbsp;&amp;nbsp;控制打印过程&lt;br /&gt;3、 DefaultPageSettings 属性&lt;br /&gt;&amp;nbsp;&amp;nbsp;存放页面设置信息 打印纸大小方向等也不需要程序员设置因为它是由页面设置对话框获取的&lt;br /&gt;4、 DocumentName 属性&lt;br /&gt;&amp;nbsp;&amp;nbsp;指定文档名称，出现在打印机状态窗口中 &lt;br /&gt;1。 BeginPrint事件&lt;br /&gt;&amp;nbsp;&amp;nbsp;在打印之前发出&lt;br /&gt;2.  PrintPage事件&lt;br /&gt;&amp;nbsp;&amp;nbsp;每打印一页是发出，事件接受一个PrintPageEventArgs参数该参数封装了打印相关的信息&lt;br /&gt;&amp;nbsp;&amp;nbsp;PrintPageEventArgs 参数有很多重要的属性&lt;br /&gt;&amp;nbsp;&amp;nbsp;1 Cancel 取消打印&lt;br /&gt;&amp;nbsp;&amp;nbsp;2 Graphics 页面的绘图对象&lt;br /&gt;&amp;nbsp;&amp;nbsp;3  HasMorePages 是否还有要打印的页面&lt;br /&gt;Print 方法 该方法没有参数 调用它将按照当前设置开始打印 &lt;br /&gt;若实现打印功能首先 构造PrintDocument对象添加打印事件&lt;br /&gt;PrintDocument printDocument;&lt;br /&gt;private void  InitializeComponent()&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;printDocument=new PrintDocument();&lt;br /&gt;printDocument.PrintPage  += new PrintPageEventHandler (this.printDocument_PrintPage);&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;实 现打印事件功能&lt;br /&gt;打印和绘图类似都是调用Graphics 类的方法进行画图 不同的是一个在显示器上一个在打印纸上并且打印要进行一些复杂的计算&lt;br /&gt;如 换行 分页等。 &lt;br /&gt;private void printDocument_PrintPage(object  sender,PrintPageEventArgs e)&lt;br /&gt;{&lt;br /&gt;StringReader lineReader = new  StringReader(textBox.Text);&lt;br /&gt;Graphics g = e.Graphics; //获得绘图对象&lt;br /&gt;float  linesPerPage = 0; //页面的行号&lt;br /&gt;float yPosition = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;//绘制字符串的纵向位置&lt;br /&gt;int  count = 0; //行计数器&lt;br /&gt;float leftMargin = e.MarginBounds.Left; //左边距&lt;br /&gt;float  topMargin = e.MarginBounds.Top; //上边距&lt;br /&gt;string line = null; 行字符串&lt;br /&gt;Font  printFont = this.textBox.Font; //当前的打印字体&lt;br /&gt;SolidBrush myBrush = new  SolidBrush(Color.Black);//刷子&lt;br /&gt;linesPerPage = e.MarginBounds.Height /  printFont.GetHeight(g);//每页可打印的行数&lt;br /&gt;//逐行的循环打印一页&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while(count &amp;lt;  linesPerPage &amp;amp;&amp;amp; ((line=lineReader.ReadLine()) != null))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;yPosition  = topMargin + (count * printFont.GetHeight(g));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g.DrawString(line,  printFont, myBrush, leftMargin, yPosition, new StringFormat());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;count++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;如 果本页打印完成而line不为空说明还有没完成的页面这将触发下一次的打印事件在下一次的打印中lineReader会&lt;br /&gt;自动读取上次没有打印完的 内容因为lineReader是这个打印方法外的类的成员它可以记录当前读取的位置&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(line != null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.HasMorePages  = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.HasMorePages = false; &lt;br /&gt;}&lt;br /&gt;打印设置，构造 打印对话框 将对话框中设置的Document属性赋给printDocument这样会将用户的设置自动保存到printDocument&lt;br /&gt;的 PrinterSettings属性中&lt;br /&gt;protected&amp;nbsp;&amp;nbsp;void FileMenuItem_PrintSet_Click(object  sender,EventArgs e)&lt;br /&gt;{&lt;br /&gt;PrintDialog printDialog = new  PrintDialog();&lt;br /&gt;printDialog.Document = printDocument;&lt;br /&gt;printDialog.ShowDialog();&lt;br /&gt;}&lt;br /&gt;页 面设置和打印预览与打印设置原理相同都是构造对话框将用户在对话框中的设置保存到相应的类的属性中&lt;br /&gt;protected&amp;nbsp;&amp;nbsp;void  FileMenuItem_PageSet_Click(object sender,EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;PageSetupDialog  pageSetupDialog = new PageSetupDialog();&lt;br /&gt;&amp;nbsp;&amp;nbsp;pageSetupDialog.Document =  printDocument;&lt;br /&gt;&amp;nbsp;&amp;nbsp;pageSetupDialog.ShowDialog();&lt;br /&gt;}&lt;br /&gt;打印预览&lt;br /&gt;protected  void FileMenuItem_PrintView_Click(object sender,EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;PrintPreviewDialog  printPreviewDialog = new PrintPreviewDialog();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;printPreviewDialog.Document  = printDocument;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printPreviewDialog.ShowDialog();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;catch(Exception  excep)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageBox.Show(excep.Message, "打印出错",  MessageBoxButtons.OK, MessageBoxIcon.Error);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;打印就可以直接调用 printDocument的Print()方法因为用户可能在打印之前还要再更改打印设置所以&lt;br /&gt;在这里再次显示打印设置对话框&lt;br /&gt;&amp;nbsp;&amp;nbsp;protected  void FileMenuItem_Print_Click(object sender,EventArgs e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;PrintDialog  printDialog = new PrintDialog();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;printDialog.Document =  printDocument;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;lineReader = new StringReader(textBox.Text);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if  (printDialog.ShowDialog() == DialogResult.OK)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printDocument.Print();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;catch(Exception  excep)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageBox.Show(excep.Message,  "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printDocument.PrintController.OnEndPrint(printDocument,new  PrintEventArgs());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;总结打印的过程是 &lt;br /&gt;1  在应用程序窗体初始化时构造PrintDocument对象&amp;nbsp;&amp;nbsp;添加 printDocument 的 PrintPage 方法 &lt;br /&gt;2  实现PrintPage方法&amp;nbsp;&amp;nbsp;4 在用户的单击事件中调用 printDocument 的 Print方法实现打印功能&lt;br /&gt;在这中间可能要用 到&amp;nbsp;&amp;nbsp;PrintDialog PrintPreviewDialog PageSetupDialog 设置和查看打印效&lt;br /&gt;&lt;br /&gt;FROM:  http://www.cnitblog.com/tthappy3/archive/2007/04/24/26116.html&lt;/span&gt;&lt;img src="http://www.cnblogs.com/ice5/aggbug/1772361.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ice5/archive/2010/07/06/1772361.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ice5/archive/2010/07/06/1772357.html</id><title type="text">经典的用户权限管理，数据结构分析设计</title><summary type="text">实现业务系统中的用户权限管理--设计篇 B/S 系统中的权限比C/S中的更显的重要，C/S系统因为具有特殊的客户端，所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现，而 B/S中，浏览器是每一台计算机都已具备的，如果不建立一个完整的权限检测，那么一个“非法用户”很可能就能通过浏览器轻易访问到B/S系统中的所有功 能。因此B/S业务系统都需要有一个或多...</summary><published>2010-07-06T10:35:00Z</published><updated>2010-07-06T10:35:00Z</updated><author><name>MARTIALIS</name><uri>http://www.cnblogs.com/ice5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ice5/archive/2010/07/06/1772357.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ice5/archive/2010/07/06/1772357.html"/><content type="html">&lt;div fc05="" fc11="" nbw-blog="" ztag="" js-fs2=""&gt;&lt;div&gt; &lt;p&gt;&lt;strong&gt;实现业务系统中的用户权限管理--设计篇&lt;/strong&gt; &lt;/p&gt;         &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;B/S 系统中的权限比C/S中的更显的重要，C/S系统因为具有特殊的客户端，所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现，而 B/S中，浏览器是每一台计算机都已具备的，如果不建立一个完整的权限检测，那么一个&amp;#8220;非法用户&amp;#8221;很可能就能通过浏览器轻易访问到B/S系统中的所有功 能。因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测，让经过授权的用户可以正常合法的使用已授权功能，而对那些未经授权的&amp;#8220;非法用户&amp;#8221; 将会将他们彻底的&amp;#8220;拒之门外&amp;#8221;。下面就让我们一起了解一下如何设计可以满足大部分B/S系统中对用户功能权限控制的权限系统。 &lt;/p&gt;         &lt;p align="left"&gt;&lt;strong&gt;需求陈述&lt;/strong&gt;&lt;strong&gt;不同职责的人员，对于系统操作的权限应该 是不同的。&lt;/strong&gt;优秀的业务系统，这是最基本的功能。&lt;/p&gt;         &lt;ul&gt;&lt;li&gt; &lt;p&gt; &lt;/p&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt; &lt;div twffan="done" align="left"&gt;&lt;strong&gt;可以对&amp;#8220;组&amp;#8221;进行权限分配&lt;/strong&gt;。对于一个大企业的业务 系统来说，如果要求管理员为其下员工逐一分配系统操作权限的话，是件耗时且不够方便的事情。所以，系统中就提出了对&amp;#8220;组&amp;#8221;进行操作的概念，将权限一致的人 员编入同一组，然后对该组进行权限分配。 &lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div twffan="done" align="left"&gt;&lt;strong&gt;权限管理系统应该是可扩展的&lt;/strong&gt;。它应该可以加入到任 何带有权限管理功能的系统中。就像是组件一样的可以被不断的重用，而不是每开发一套管理系统，就要针对权限管理部分进行重新开发。 &lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div twffan="done" align="left"&gt;&lt;strong&gt;满足业务系统中的功能权限。&lt;/strong&gt;传统业务系统中，存在 着两种权限管理，其一是功能权限的管理，而另外一种则是资源权限的管理，在不同系统之间，功能权限是可以重用的，而资源权限则不能。&lt;/div&gt; &lt;/li&gt;&lt;/ul&gt;             &lt;p align="left"&gt;&lt;strong&gt;关于设计&lt;/strong&gt;&lt;/p&gt;             &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;借助 NoahWeb的动作编程理念，在设计阶段，系统设计人员无须考虑程序结构的设计，而是从程序流程以及数据库结构开始入手。为了实现需求，数据库的设计可 谓及其重要，无论是&amp;#8220;组&amp;#8221;操作的概念，还是整套权限管理系统的重用性，都在于数据库的设计。&lt;/p&gt;             &lt;p align="left"&gt;我们先来分析一下数据库结构：&lt;/p&gt;             &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;首 先，action表（&lt;strong&gt;以下简称为&amp;#8220;权限表&amp;#8221;&lt;/strong&gt;），gorupmanager表（&lt;strong&gt;以下简称为&amp;#8220;管理组表&amp;#8221;&lt;/strong&gt;）， 以及master表（&lt;strong&gt;以下简称为&amp;#8220;人员表&amp;#8221;&lt;/strong&gt;），是三张实体表，它们依次记录着&amp;#8220;权限&amp;#8221;的信息，&amp;#8220;管理组&amp;#8221;的信息和&amp;#8220;人 员&amp;#8221;的信息。如下图：&lt;/p&gt;             &lt;p align="center"&gt;&lt;img title="在新窗口打开图片" style="cursor: pointer;" src="http://www.noahweb.net/mail/2/16.gif" twffan="done" height="328" width="460"  alt="" /&gt;&lt;/p&gt;             &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;这三个 表之间的关系是多对多的，一个权限可能同时属于多个管理组，一个管理组中也可能同时包含多个权限。同样的道理，一个人员可能同时属于多个管理组，而一个管 理组中也可能同时包含多个人员。如下图：&lt;/p&gt;             &lt;p align="center"&gt;&lt;img title="在新窗口打开图片" style="cursor: pointer;" src="http://www.noahweb.net/mail/2/1.gif" twffan="done" height="321" width="456"  alt="" /&gt;&lt;/p&gt;             &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;由于这 三张表之间存在着多对多的关系，那么它们之间的交互，最好使用另外两张表来完成。而这两张表起着映射的作用，分别是&amp;#8220;actiongroup&amp;#8221;表&lt;strong&gt;（以 下简称&amp;#8220;权限映射表&amp;#8221;）&lt;/strong&gt;和&amp;#8220;mastergroup&amp;#8221;表&lt;strong&gt;（以下简称&amp;#8220;人员映射表&amp;#8221;）&lt;/strong&gt;，前者映射了权 限表与管理组表之间的交互。后者映射了人员表与管理组表之间的交互。如下图：&lt;/p&gt;             &lt;p align="center"&gt;&lt;img title="在新窗口打开图片" style="cursor: pointer;" src="http://www.noahweb.net/mail/2/15.gif" twffan="done" height="318" width="637"  alt="" /&gt;&lt;/p&gt;             &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;另外， 还需要一张表来控制系统运行时左侧菜单中的权限分栏，也就是&amp;#8220;权限分栏表&amp;#8221;，如下图：&lt;/p&gt;             &lt;p align="center"&gt;&lt;img title="在新窗口打开图片" style="cursor: pointer;" src="http://www.noahweb.net/mail/2/17.gif" twffan="done" height="318" width="637"  alt="" /&gt;&lt;/p&gt;             &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;根据上 面的分析，我们进行数据库结构设计，如下图：&lt;/p&gt;             &lt;p align="left"&gt;&lt;a href="http://www.noahweb.net/mail/2/Project.htm#biao" target="_blank"&gt;点击这里查看权限管理系统数据表字段设计&lt;/a&gt;&lt;/p&gt;             &lt;p align="center"&gt;&lt;img title="在新窗口打开图片" style="cursor: pointer;" src="http://www.noahweb.net/mail/2/datebase.gif" twffan="done" height="320" width="624"  alt="" /&gt;&lt;/p&gt;             &lt;p align="left"&gt; &lt;/p&gt;             &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;为了能 够进行良好的分析，我们将数据库结构图拆分开来，三张实体表的作用已经很清晰，现在我们来看一下两张映射表的作用。&lt;/p&gt;             &lt;p align="left"&gt;&lt;strong&gt;一 权限映射表&lt;/strong&gt; 如下图：&lt;/p&gt;             &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;首先， 我们来了解一下&lt;strong&gt;权限映射表&lt;/strong&gt;与&lt;strong&gt;管理组表&lt;/strong&gt;以及&lt;strong&gt;权限表&lt;/strong&gt;之 间的字段关联。&lt;/p&gt;             &lt;p align="center"&gt;&lt;img title="在新窗口打开图片" style="cursor: pointer;" src="http://www.noahweb.net/mail/2/6.gif" twffan="done" height="159" width="457"  alt="" /&gt;&lt;/p&gt;             &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;看图中 的红圈，先看gorupid字段相关联，这种关联方式在实际数据库中的表现如下图：&lt;/p&gt;             &lt;p align="center"&gt;&lt;img title="在新窗口打开图片" style="cursor: pointer;" src="http://www.noahweb.net/mail/2/3.gif" twffan="done" height="152" width="534"  alt="" /&gt;&lt;/p&gt;             &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;如图中 所示，&lt;strong&gt;管理组表&lt;/strong&gt;中&amp;#8220;超级管理员&amp;#8221;的groupid为1，那么&lt;strong&gt;权限映射表&lt;/strong&gt;中 groupid为1的权限也就是&amp;#8220;超级管理员&amp;#8221;所拥有的权限。&lt;/p&gt;             &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;使用 groupid字段关联，是为了查到一个管理组能够执行的权限有哪些。但这些权限的详细信息却是action字段关联所查询到的。&lt;/p&gt;             &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;action 字段相关联在数据库中的表现如下图：&lt;/p&gt;             &lt;p align="center"&gt;&lt;img title="在新窗口打开图片" style="cursor: pointer;" src="http://www.noahweb.net/mail/2/5.gif" twffan="done" height="154" width="540"  alt="" /&gt;&lt;/p&gt;             &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;通过这 种关联，才查询到&lt;strong&gt;权限映射表&lt;/strong&gt;之中那些权限的详细信息。综合起来，我们就知道了一个管理组可以执行的权限有哪些，以及这 些权限的详细信息是什么。&lt;/p&gt;             &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;或许你 会问，为什么不使用actionid字段相关联呢？因为：&lt;/p&gt;             &lt;ul&gt;&lt;li&gt; &lt;div twffan="done" align="left"&gt;&lt;strong&gt;权限表&lt;/strong&gt;中的id字段在经过多次的数据库操作之后可 能会发生更改。&lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div twffan="done" align="left"&gt;&lt;strong&gt;权限映射表&lt;/strong&gt;中仅仅记录着一个管理组可以执行的权 限。&lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div twffan="done" align="left"&gt;一旦&lt;strong&gt;权限表&lt;/strong&gt;中的id更改，那么&lt;strong&gt;权 限映射表&lt;/strong&gt;中的记录也就更改了。&lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div twffan="done" align="left"&gt;一个管理组可以执行的权限势必将出错，这是非常不希望的。&lt;/div&gt; &lt;/li&gt;&lt;/ul&gt;                 &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;考 虑到上面的情况，所以应该使用action字段相关联，因为：&lt;/p&gt;                 &lt;ul&gt;&lt;li&gt; &lt;div twffan="done" align="left"&gt;在&lt;strong&gt;权限表&lt;/strong&gt;中，id可能发生变化，而action字 段却是在任何情况下也不可能发生变化的。&lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div twffan="done" align="left"&gt;&lt;strong&gt;权限映射表&lt;/strong&gt;中记录的action字段也就不会变。&lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div twffan="done" align="left"&gt;一个管理组可以执行的权限就不会出错了。&lt;/div&gt; &lt;/li&gt;&lt;/ul&gt;                     &lt;p align="left"&gt;&lt;strong&gt;二 人员映射表&lt;/strong&gt; 如下图：&lt;/p&gt;                     &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;我 们来了解一下&lt;strong&gt;人员映射表&lt;/strong&gt;与&lt;strong&gt;管理组表&lt;/strong&gt;以及&lt;strong&gt;人员表&lt;/strong&gt;之 间的字段关联，如下图：&lt;/p&gt;                     &lt;p align="center"&gt;&lt;img title="在新窗口打开图片" style="cursor: pointer;" src="http://www.noahweb.net/mail/2/13.gif" twffan="done" height="324" width="442"  alt="" /&gt;&lt;/p&gt;                     &lt;p align="left"&gt; &lt;/p&gt;                     &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;看 图中的红圈部分，先看groupid字段关联，这种关联方式在数据库中的表现如下图：&lt;/p&gt;                     &lt;p align="center"&gt;&lt;img title="在新窗口打开图片" style="cursor: pointer;" src="http://www.noahweb.net/mail/2/10.gif" twffan="done" height="109" width="437"  alt="" /&gt;&lt;/p&gt;                     &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;如 图，&amp;#8220;超级管理员&amp;#8221;组的groupid为1，我们再看&lt;strong&gt;人员映射表&lt;/strong&gt;，admin属于超级管理员组，而 administrator属于超级管理员组，同时也属于管理员组。&lt;/p&gt;                     &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;使 用这种关联方式，是为了查到一个管理组中的人员有谁。和上面一样，人员的详细信息是靠id字段（&lt;strong&gt;人员映射表&lt;/strong&gt;中是 masterid字段）关联查询到的。&lt;/p&gt;                     &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;id 字段（&lt;strong&gt;人员映射表&lt;/strong&gt;中是masterid字段）关联表现在数据库中的形式如下图：&lt;/p&gt;                     &lt;p align="center"&gt;&lt;img title="在新窗口打开图片" style="cursor: pointer;" src="http://www.noahweb.net/mail/2/12.gif" twffan="done" height="108" width="526"  alt="" /&gt;&lt;/p&gt;                     &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;一 个人员可能同时属于多个&amp;#8220;管理组&amp;#8221;，如图中，administrator就同时属于两个&amp;#8220;管理组&amp;#8221;。所以，在&lt;strong&gt;人员映射表&lt;/strong&gt;中 关于administrator的记录就会是两条。&lt;/p&gt;                     &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;这 种关联方式才查询到管理组中人员的详细信息有哪些。综合起来，才可以知道一个管理组中的人员有谁，以及这个人员的详细信息。&lt;/p&gt;                     &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;再 结合上面谈到的&lt;strong&gt;权限表&lt;/strong&gt;和&lt;strong&gt;权限映射表&lt;/strong&gt;，就实现了需求中的&amp;#8220;组&amp;#8221;操作，如下图：&lt;/p&gt;                     &lt;p align="center"&gt;&lt;img title="在新窗口打开图片" style="cursor: pointer;" src="http://www.noahweb.net/mail/2/14.gif" twffan="done" height="323" width="636"  alt="" /&gt;&lt;/p&gt;                     &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;其 实，&lt;strong&gt;管理组表&lt;/strong&gt;中仅仅记录着组的基本信息，如名称，组id等等。至于一个组中人员的详细信息，以及该组能够执行的权限的 详细信息，都记录在&lt;strong&gt;人员表&lt;/strong&gt;和&lt;strong&gt;权限表&lt;/strong&gt;中。两张&lt;strong&gt;映射表&lt;/strong&gt;才 真正记录着一个组有哪些人员，能够执行哪些权限。通过两张映射表的衔接，三张实体表之间的交互才得以实现，&lt;strong&gt;从而完成了需求中提到的&amp;#8220;组&amp;#8221; 操作&lt;/strong&gt;。&lt;/p&gt;                     &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;我 们再来看一下&lt;strong&gt;权限分栏表&lt;/strong&gt;与&lt;strong&gt;权限表&lt;/strong&gt;之间的交互。这两张表之间的字段关联如下图：&lt;/p&gt;                     &lt;p align="center"&gt;&lt;img src="http://www.noahweb.net/mail/2/19.gif" twffan="done" height="142" width="334"  alt="" /&gt;&lt;/p&gt;                     &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;两 张表使用了actioncolumnid字段相关联，这种关联方式在数据库中的表现如下图：&lt;/p&gt;                     &lt;p align="center"&gt;&lt;img title="在新窗口打开图片" style="cursor: pointer;" src="http://www.noahweb.net/mail/2/18.gif" twffan="done" height="363" width="531"  alt="" /&gt;&lt;/p&gt;                     &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;如 图所示，通过这种关联方式，我们可以非常清晰的看到&lt;strong&gt;权限表&lt;/strong&gt;中的权限属于哪个分栏。&lt;/p&gt;                     &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;现 在，数据库结构已经很清晰了，分配权限的功能以及&amp;#8220;组&amp;#8221;操作都已经实现。下面我们再来分析一下需求中提到的关于权限管理系统的重用性问题。&lt;/p&gt;                     &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;为 什么使用这种数据库设计方式搭建起来的系统可以重用呢？&lt;/p&gt;                     &lt;ul&gt;&lt;li&gt; &lt;div twffan="done" align="left"&gt;&lt;strong&gt;三张实体表中记录着系统中的三个决定性元素。&lt;/strong&gt;&amp;#8220;权 限&amp;#8221;，&amp;#8220;组&amp;#8221;和&amp;#8220;人&amp;#8221;。而这三种元素可以任意添加，彼此之间不受影响。无论是那种类型的业务系统，这三个决定性元素是不会变的，也就意味着结构上不会变， 而变的仅仅是数据。&lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div twffan="done" align="left"&gt;&lt;strong&gt;两张映射表中记录着三个元素之间的关系。&lt;/strong&gt;但这些关 系完全是人为创建的，需要变化的时候，只是对数据库中的记录进行操作，无需改动结构。&lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div twffan="done" align="left"&gt;&lt;strong&gt;权限分栏表中记录着系统使用时显示的分栏&lt;/strong&gt;。无论是 要添加分栏，修改分栏还是减少分栏，也只不过是操作记录而已。&lt;/div&gt; &lt;/li&gt;&lt;/ul&gt;                         &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;综 上所述，这样设计数据库，系统是完全可以重用的，并且经受得住&amp;#8220;变更&amp;#8221;考验的。&lt;/p&gt;                         &lt;p align="left"&gt;&lt;strong&gt;总结：&lt;/strong&gt;&lt;/p&gt;                         &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;此 套系统的重点在于，三张&lt;strong&gt;实体表&lt;/strong&gt;牢牢地抓住了系统的核心成分，而两张映射表完美地映射出三张实体表之间的交互。其难点在 于，理解映射表的工作，它记录着关系，并且实现了&amp;#8220;组&amp;#8221;操作的概念。而系统总体的设计是本着可以在不同的MIS系统中&amp;#8220;重用&amp;#8221;来满足不同系统的功能权限设 置。&lt;/p&gt;                         &lt;p align="left"&gt;&lt;strong&gt;附录：&lt;/strong&gt;&lt;/p&gt;                         &lt;p align="center"&gt;&lt;strong&gt;权限管理系统数据表的字段设计&lt;/strong&gt;&lt;/p&gt;                         &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;下 面我们来看看权限管理系统的数据库表设计，共分为六张表，如下图：&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p align="left"&gt;action表：&lt;/p&gt; &lt;/blockquote&gt; &lt;p align="center"&gt;&lt;em&gt;&lt;img title="在新窗口打开图片" style="cursor: pointer;" src="http://www.noahweb.net/mail/2/datebase1.gif" twffan="done" height="119" width="502"  alt="" /&gt;&lt;/em&gt;&lt;/p&gt;                         &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;action 表中记录着系统中所有的动作，以及动作相关描述。&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p align="left"&gt;actioncolumn表：&lt;/p&gt; &lt;/blockquote&gt; &lt;p align="center"&gt;&lt;img title="在新窗口打开图片" style="cursor: pointer;" src="http://www.noahweb.net/mail/2/datebase2.gif" twffan="done" height="75" width="459"  alt="" /&gt;&lt;/p&gt;                         &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;actioncolumn 表中记录着动作的分栏，系统运行时，左侧菜单栏提供了几块不同的功能，每一块就是一个分栏，每添加一个分栏，该表中的记录就会增加一条,相对应的，左侧菜 单栏中也会新增机一个栏。&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p align="left"&gt;actiongroup表：&lt;/p&gt; &lt;/blockquote&gt; &lt;p align="center"&gt;&lt;img title="在新窗口打开图片" style="cursor: pointer;" src="http://www.noahweb.net/mail/2/datebase3.gif" twffan="done" height="135" width="498"  alt="" /&gt;&lt;/p&gt;                         &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;actiongroup 表记录着动作所在的组。&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p align="left"&gt;groupmanager表：&lt;/p&gt; &lt;/blockquote&gt; &lt;p align="center"&gt;&lt;img title="在新窗口打开图片" style="cursor: pointer;" src="http://www.noahweb.net/mail/2/datebase4.gif" twffan="done" height="135" width="405"  alt="" /&gt;&lt;/p&gt;                         &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;groupmanager 表记录着管理组的相关信息，每添加一个管理组，这里的记录就会增加一条。&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p align="left"&gt;mastergroup表：&lt;/p&gt; &lt;/blockquote&gt; &lt;p align="center"&gt;&lt;img title="在新窗口打开图片" style="cursor: pointer;" src="http://www.noahweb.net/mail/2/datebase6.gif" twffan="done" height="150" width="444"  alt="" /&gt;&lt;/p&gt;                         &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;mastergroup 表记录着管理员所在的管理组，由于一名管理员可能同同时属于多个组，所以该表中关于某一名管理员的记录可能有多条。&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p align="left"&gt;master表：&lt;/p&gt; &lt;/blockquote&gt; &lt;p align="center"&gt;&lt;img title="在新窗口打开图片" style="cursor: pointer;" src="http://www.noahweb.net/mail/2/datebase5.gif" twffan="done" height="300" width="409"  alt="" /&gt;&lt;/p&gt;                         &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt;master 表记录着所有管理员的信息，每添加一个管理员，该表就会增加一条记录。&lt;/p&gt; &lt;/div&gt;                                                                 &lt;p&gt;Trackback:  http://tb.blog.csdn.net/TrackBack.aspx?PostId=1497893&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/ice5/aggbug/1772357.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ice5/archive/2010/07/06/1772357.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ice5/archive/2010/07/06/1772359.html</id><title type="text">Page.ClientScript.RegisterClientScriptBlock 与RegisterClientScriptBlock</title><summary type="text">最近的项目用到这样一段代码: //要根据后台取的值初始化页面显示 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { GetGovShiftSetInfo();//此方法作用：取数据库数据来设置rbTwo状态 if (rbTwo.Checked) { //Page.RegisterStar...</summary><published>2010-07-06T10:35:00Z</published><updated>2010-07-06T10:35:00Z</updated><author><name>MARTIALIS</name><uri>http://www.cnblogs.com/ice5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ice5/archive/2010/07/06/1772359.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ice5/archive/2010/07/06/1772359.html"/><content type="html">&lt;div fc05="" fc11="" nbw-blog="" ztag="" js-fs2=""&gt;&lt;div&gt;&lt;div&gt;  最近的项目用到这样一段代码:&lt;/div&gt; &lt;div&gt;//要根据后台取的值初始化页面显示&lt;/div&gt; &lt;div&gt;protected void Page_Load(object sender, EventArgs e)&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!IsPostBack)&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetGovShiftSetInfo();//此方法作用：取数据库数据来设置rbTwo状态&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (rbTwo.Checked)&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Page.RegisterStartupScript("",  "&amp;lt;script&amp;gt;istwo();&amp;lt;/script&amp;gt;"); //1.0的语法构造，已过时&lt;/div&gt; &lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  Page.ClientScript.RegisterStartupScript(this.GetType(), "MyScript",  "istwo();", true);&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;  &lt;div&gt;----------------------------------------------------------------------------------------&lt;/div&gt; &lt;div&gt;//放在前台的JS： &lt;/div&gt; &lt;div&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function istwo()&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var&amp;nbsp;&amp;nbsp;  obj1=window.document.getElementById("ctl00_MainContent_panelPmB");&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var&amp;nbsp;&amp;nbsp;  obj2=window.document.getElementById("ctl00_MainContent_panelPmE");&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var&amp;nbsp;&amp;nbsp;  obj3=window.document.getElementById("ctl00_MainContent_lbAmB");&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var&amp;nbsp;&amp;nbsp;  obj4=window.document.getElementById("ctl00_MainContent_lbAmE");&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var&amp;nbsp;&amp;nbsp;  obj5=window.document.getElementById("ctl00_MainContent_panelCard");&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; obj1.style.visibility = "hidden";&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; obj2.style.visibility = "hidden";&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; obj3.style.visibility = "hidden";&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; obj4.style.visibility = "hidden";&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; obj5.style.visibility = "hidden";&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var no3=  parseInt(window.document.getElementById("ctl00_MainContent_txtValue").value);&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (no3 &amp;lt;&amp;nbsp;&amp;nbsp; 5 || no3 &amp;gt; 500 )&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert("上下班刷卡有效时限：[5-500]分钟内");&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  window.document.getElementById("ctl00_MainContent_rbFour").focus(); &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  window.document.getElementById("ctl00_MainContent_rbFour").checked=true;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; isfour();&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt; &amp;nbsp;&amp;nbsp;  --------------------------------------------------------------------------------------------------------&lt;/div&gt; &lt;div&gt;之所以没用&lt;strong&gt;Page.ClientScript.RegisterClientScriptBlock&lt;/strong&gt;而用  &lt;strong&gt;Page.ClientScript.RegisterStartupScript&lt;/strong&gt;是因为&lt;strong&gt;：&lt;/strong&gt;RegisterStartupScript 把script放置在ASP.NET page的底部，而RegisterClientScriptBlock把script放置在ASP.NET page的顶部，用RegisterClientScriptBlock会报错，javascript函数不到对象&lt;br /&gt; &lt;/div&gt; &lt;div&gt; &lt;strong&gt;下面为相同例子，来源&lt;/strong&gt;&lt;a target="_blank" href="http://zhhui.cnblogs.com/archive/2006/03/22/355855.aspx"&gt;http://zhhui.cnblogs.com/archive/2006/03/22/355855.aspx&lt;/a&gt;&lt;/div&gt; &lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt; &lt;div&gt;&lt;strong&gt;1.使用 Page.ClientScript.RegisterClientScriptBlock&lt;br /&gt; Listing 4-10: Using the RegisterClientScriptBlock method&lt;br /&gt; &lt;/strong&gt;&lt;/div&gt; &lt;div&gt;&lt;strong&gt;c#&lt;br /&gt; &lt;/strong&gt; &lt;div&gt; &lt;div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"&gt;&lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;span style="color: #000000;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: #000000;"&gt;@ Page Language&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;#8221;C#&amp;#8221; &lt;/span&gt;&lt;span style="color: #000000;"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;script runat&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;#8221;server&amp;#8221;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Page_Load(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, EventArgs e)&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /&gt;&lt;img style="display: none;" src="http://zhhui.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color: #000000;"&gt;{&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /&gt;&lt;img style="display: none;" src="http://zhhui.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; myScript &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; @&amp;#8221;function  AlertHello() &lt;/span&gt;&lt;span style="color: #000000;"&gt;{ alert(&amp;#8216;Hello ASP.NET&amp;#8217;); }&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;#8221;;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /&gt;Page.ClientScript.RegisterClientScriptBlock(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.GetType(),&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /&gt;&amp;#8220;MyScript&amp;#8221;, myScript, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;script&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;div&gt;&lt;br /&gt; 运行结果如下：&lt;br /&gt; &lt;/div&gt; &lt;div&gt; &lt;div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"&gt;&lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;html &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&amp;#8221;http://www.w3.org/1999/xhtml&amp;#8221;  &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;Adding JavaScript&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;form &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;method&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&amp;#8221;post&amp;#8221; &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;action&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&amp;#8221;JavaScriptPage.aspx&amp;#8221; &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&amp;#8221;form1&amp;#8221;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;input &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&amp;#8221;hidden&amp;#8221;  &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&amp;#8221;__VIEWSTATE&amp;#8221;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&amp;#8221;/wEPDwUKMTY3NzE5MjIyMGRkiyYSRMg+bcXi9DiawYlbxndiTDo=&amp;#8221;  &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /&gt;&lt;img style="display: none;" src="http://zhhui.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;script &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&amp;#8221;text/javascript&amp;#8221;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color: #000000; background-color: #f5f5f5;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #000000; background-color: #f5f5f5;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: #000000; background-color: #f5f5f5;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /&gt;&lt;img style="display: none;" src="http://zhhui.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff; background-color: #f5f5f5;"&gt;function&lt;/span&gt;&lt;span style="color: #000000; background-color: #f5f5f5;"&gt;  AlertHello() &lt;/span&gt;&lt;span&gt;&lt;span style="color: #000000; background-color: #f5f5f5;"&gt;{  alert(&amp;#8216;Hello ASP.NET&amp;#8217;); }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #008000; background-color: #f5f5f5;"&gt;//&lt;/span&gt;&lt;span style="color: #008000; background-color: #f5f5f5;"&gt; --&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; background-color: #f5f5f5;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;input &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&amp;#8221;submit&amp;#8221;  &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&amp;#8221;Button1&amp;#8221; &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&amp;#8221;Button&amp;#8221;  &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;onclick&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&amp;#8221;AlertHello();&amp;#8221;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&amp;#8221;Button1&amp;#8221; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;form&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;div&gt;&lt;br /&gt; &lt;strong&gt;2.使用Page.ClientScript.RegisterStartupScript&lt;/strong&gt;&lt;br /&gt; &lt;br /&gt; RegisterStartupScript方法与RegisterClientScriptBlock方法最大的不同是：RegisterStartupScript 把script放置在ASP.NET  page的底部，而RegisterClientScriptBlock把script放置在ASP.NET page的顶部&lt;br /&gt; &lt;br /&gt; 如果你的页面中有如下代码：&lt;br /&gt; &lt;/div&gt; &lt;div&gt; &lt;div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; height: 17px; background-color: #eeeeee;"&gt;&lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;asp:TextBox &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&amp;#8221;TextBox1&amp;#8221;  &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Runat&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&amp;#8221;server&amp;#8221;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;Hello  ASP.NET&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;asp:TextBox&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;div&gt;&lt;br /&gt; &lt;strong&gt;Listing 4-11: Improperly using the RegisterClientScriptBlock  method&lt;br /&gt; &lt;/strong&gt; &lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt; &lt;div&gt;&lt;strong&gt;c#&lt;/strong&gt;&lt;br /&gt; &lt;/div&gt; &lt;div&gt; &lt;div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"&gt;&lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Page_Load(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, EventArgs e)&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /&gt;&lt;img style="display: none;" src="http://zhhui.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color: #000000;"&gt;{&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; myScript &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;  @&amp;#8221;alert(document.forms[&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;][&amp;#8216;TextBox1&amp;#8217;].value);&amp;#8221;;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /&gt;Page.ClientScript.RegisterClientScriptBlock(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.GetType(),&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /&gt;&amp;#8220;MyScript&amp;#8221;, myScript, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;div&gt;此页面运行时会报错，原因是JavaScript function先于text box被安放于浏览器。因此JavaScript  function找不到TextBox1。&lt;br /&gt; &lt;br /&gt; &lt;strong&gt;Listing 4-12: Using the RegisterStartupScript method&lt;br /&gt; &lt;/strong&gt;&lt;/div&gt; &lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt; &lt;div&gt;&lt;strong&gt;c#&lt;br /&gt; &lt;/strong&gt; &lt;div&gt; &lt;div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"&gt;&lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Page_Load(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, EventArgs e)&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /&gt;&lt;img style="display: none;" src="http://zhhui.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color: #000000;"&gt;{&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; myScript &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;  @&amp;#8221;alert(document.forms[&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;][&amp;#8216;TextBox1&amp;#8217;].value);&amp;#8221;;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /&gt;Page.ClientScript.RegisterStartupScript(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.GetType(),&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /&gt;&amp;#8220;MyScript&amp;#8221;, myScript, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;div&gt;这段代码把JavaScript function放置于ASP.NET  page底部，因此JavaScript运行时它能找到TextBox1。&lt;br /&gt; &lt;br /&gt; &lt;strong&gt;3.使用Page.ClientScript.RegisterClientScriptInclude&lt;/strong&gt;&lt;br /&gt; 许多开发者把JavaScript放置在.js文件中，使用RegisterClientScriptInclude方法可以注册.js文件中的 JavaScript。&lt;br /&gt; &lt;strong&gt;Listing 4-13: Using the RegisterClientScriptInclude method&lt;br /&gt; &lt;/strong&gt;&lt;/div&gt;  &lt;div&gt;&lt;strong&gt;c#&lt;/strong&gt;&lt;br /&gt; &lt;/div&gt; &lt;div&gt; &lt;div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"&gt;&lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; myScript &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;  &amp;#8220;myJavaScriptCode.js&amp;#8221;&lt;br /&gt; &lt;img src="http://zhhui.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;Page.ClientScript.RegisterClientScriptInclude(&amp;#8220;myKey&amp;#8221;,  myScript);&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;div&gt;这将在ASP.NET页面产生如下结构：&lt;br /&gt; &amp;lt;script src=&amp;#8221;myJavaScriptCode.js&amp;#8221;  type=&amp;#8221;text/javascript&amp;#8221;&amp;gt;&amp;lt;/script&amp;gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/ice5/aggbug/1772359.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ice5/archive/2010/07/06/1772359.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ice5/archive/2010/07/06/1772353.html</id><title type="text">FireFox 下使用类似IE的模式对话框-showModalDialog</title><summary type="text">在網頁程式中,?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?ó ·B有時我們會希望使用者按下按鈕後開啟一個保持在原視窗前方的子視窗,而在 IE中,我們可以使用showModalDialog來達成,語法如下 : ?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?ó ·B?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z...</summary><published>2010-07-06T10:33:00Z</published><updated>2010-07-06T10:33:00Z</updated><author><name>MARTIALIS</name><uri>http://www.cnblogs.com/ice5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ice5/archive/2010/07/06/1772353.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ice5/archive/2010/07/06/1772353.html"/><content type="html">在網頁程式中,&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;有時我們會希望使用者按下按鈕後開啟一個保持在原視窗前方的子視窗,&lt;br /&gt;而在 IE中,我們可以使用showModalDialog來達成,&lt;br /&gt;語法如下 : &lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;&lt;div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"&gt;&lt;div&gt;&lt;img src="http://bbs.szblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;span style="color: #000000;"&gt;vReturnValue &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;  window.showModalDialog(sURL [, vArguments] [, sFeatures])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;範例:&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;&lt;div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"&gt;&lt;div&gt;&lt;img src="http://bbs.szblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;span style="color: #000000;"&gt;window.showModalDialog(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;openwin.html&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;Arguments&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;dialogHeight: 200px;  dialogWidth: 200px; dialogTop: 10px; dialogLeft: 10px; edge: Raised; center: Yes; help: Yes; resizable: Yes; status: Yes;&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;但是.在Firefox中卻沒有showModalDialog這東西,&lt;br /&gt;而在 FireFox中我們只能使用window.open實現這樣的功能,&lt;br /&gt;window.open的語法如下 :&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;&lt;div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"&gt;&lt;div&gt;&lt;img src="http://bbs.szblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;span style="color: #000000;"&gt;oNewWindow &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;  window.open( [sURL] [, sName] [, sFeatures] [, bReplace]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;只是,在Firefox下,window.open的參數中,sFeature多了一些功能設定,&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;而在FireFox下要讓開啟的視窗跟IE的showModalDialog一樣的話,&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;只要在sFeatures中加個modal=yes就可以了,&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;範例如下:&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;&lt;div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"&gt;&lt;div&gt;&lt;img src="http://bbs.szblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;span style="color: #000000;"&gt;window.open(&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;openwin.html&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;newWin&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;modal=yes,width=200,height=200,resizable=no,scrollbars=no&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;提到了子視窗,不得不提的就是子視窗跟母視窗間的交互操作,&lt;br /&gt;因為我想很多人開啟 對話視窗應該都是為了將操作完的結果丟回去給母視窗...&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;如果是用showModalDialog的話,&lt;br /&gt;在子視窗中要存取母 視窗的函數的話,&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;要注意兩個地方,&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;1.(母視窗中)開啟視窗:&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;&lt;div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"&gt;&lt;div&gt;&lt;img src="http://bbs.szblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;span style="color: #000000;"&gt;window.showModalDialog(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;openwin.html&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,self,&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;modal=yes,width=775,height=700,resizable=no,scrollbars=no&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;在第二個參數(vArguments),改成self.&lt;br /&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;2.(子視窗中)調用母視窗的函數:&lt;br /&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;&lt;div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"&gt;&lt;div&gt;&lt;img src="http://bbs.szblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;span style="color: #000000;"&gt;window.dialogArguments.ShowMsg(obj.value);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;ShowMsg為母視窗中的函數. &lt;br /&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;而使用window.open的話,&lt;br /&gt;則是要注意一個地方,&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;1.(子視窗中)調用母視窗的函數:&lt;br /&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;&lt;div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"&gt;&lt;div&gt;&lt;img src="http://bbs.szblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /&gt;&lt;span style="color: #000000;"&gt;window.opener.ShowMsg(obj.value);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;使用window.opener去接母視窗的物件.&lt;br /&gt;&lt;span style="display: none; font-size: 0px;"&gt;?u??&#x1A;????#bbs.szblogs.comk?&#x1F;?Z?&amp;#243;  &amp;#183;B&lt;/span&gt;&lt;br /&gt;如此一來,只要再透過navigator.appName去判斷瀏覽器為何,&lt;br /&gt;就可以 寫一個IE與FireFox相容的函數...&lt;img src="http://www.cnblogs.com/ice5/aggbug/1772353.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ice5/archive/2010/07/06/1772353.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ice5/archive/2010/07/06/1772351.html</id><title type="text">使用xmlhttp.send()方法的参数来传递大容量的数据</title><summary type="text">Ajax技术中的xmlhttp.send()方法提供我们传送大量数据的功能,要使用该功能,首先要将要传到服务端的数据封装在一个xml对象中,在将 这个xml对象的xml属性做为send()方法的参数就可以. 客户端代码: var guidArray = guidlist.split( " , " ); var xmlDom = new ActiveXObject( " MSXML2.DOMDocu...</summary><published>2010-07-06T10:32:00Z</published><updated>2010-07-06T10:32:00Z</updated><author><name>MARTIALIS</name><uri>http://www.cnblogs.com/ice5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ice5/archive/2010/07/06/1772351.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ice5/archive/2010/07/06/1772351.html"/><content type="html">Ajax技术中的xmlhttp.send()方法提供我们传送大量数据的功能,要使用该功能,首先要将要传到服务端的数据封装在一个xml对象中,在将 这个xml对象的xml属性做为send()方法的参数就可以.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 客户端代码:   &lt;div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"&gt;     &lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;     &lt;span style="color: #000000;"&gt;&amp;nbsp;guidArray&lt;/span&gt;     &lt;span style="color: #000000;"&gt;=&lt;/span&gt;     &lt;span style="color: #000000;"&gt;guidlist.split(&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;,&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;     &lt;span style="color: #000000;"&gt;&amp;nbsp;xmlDom&lt;/span&gt;     &lt;span style="color: #000000;"&gt;=&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;     &lt;span style="color: #000000;"&gt;&amp;nbsp;ActiveXObject(&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;MSXML2.DOMDocument&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlDom.loadXML(&lt;/span&gt;     &lt;span style="color: #000000;"&gt;""&lt;/span&gt;     &lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;     &lt;span style="color: #000000;"&gt;&amp;nbsp;domRoot&lt;/span&gt;     &lt;span style="color: #000000;"&gt;=&lt;/span&gt;     &lt;span style="color: #000000;"&gt;&amp;nbsp;xmlDom.createElement(&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;NewDataSet&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlDom.appendChild(domRoot);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;     &lt;span style="color: #000000;"&gt;(&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;     &lt;span style="color: #000000;"&gt;&amp;nbsp;i&lt;/span&gt;     &lt;span style="color: #000000;"&gt;=&lt;/span&gt;     &lt;span style="color: #000000;"&gt;0&lt;/span&gt;     &lt;span style="color: #000000;"&gt;;i&lt;/span&gt;     &lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;     &lt;span style="color: #000000;"&gt;guidArray.length;i&lt;/span&gt;     &lt;span style="color: #000000;"&gt;++&lt;/span&gt;     &lt;span style="color: #000000;"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;     &lt;span style="color: #000000;"&gt;&amp;nbsp;node&lt;/span&gt;     &lt;span style="color: #000000;"&gt;=&lt;/span&gt;     &lt;span style="color: #000000;"&gt;&amp;nbsp;xmlDom.createElement(&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;guid&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;node.text&lt;/span&gt;     &lt;span style="color: #000000;"&gt;=&lt;/span&gt;     &lt;span style="color: #000000;"&gt;guidArray[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;domRoot.appendChild(node);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;     &lt;span style="color: #000000;"&gt;&amp;nbsp;xmlhttp&lt;/span&gt;     &lt;span style="color: #000000;"&gt;=&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;     &lt;span style="color: #000000;"&gt;&amp;nbsp;ActiveXObject(&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;MSXML2.XMLHTTP&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlhttp.onreadystatechange&lt;/span&gt;     &lt;span style="color: #000000;"&gt;=&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;function&lt;/span&gt;     &lt;span style="color: #000000;"&gt;(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;     &lt;span style="color: #000000;"&gt;&amp;nbsp;(xmlhttp.readyState&lt;/span&gt;     &lt;span style="color: #000000;"&gt;==&lt;/span&gt;     &lt;span style="color: #000000;"&gt;4&lt;/span&gt;     &lt;span style="color: #000000;"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;     &lt;span style="color: #000000;"&gt;&amp;nbsp;(xmlhttp.status&lt;/span&gt;     &lt;span style="color: #000000;"&gt;==&lt;/span&gt;     &lt;span style="color: #000000;"&gt;200&lt;/span&gt;     &lt;span style="color: #000000;"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;处理完成&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;     &lt;span style="color: #000000;"&gt;       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(xmlhttp.responseText);&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlhttp.Open(&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;POST&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;,&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;fmSmsPostProcess.aspx?sStatus=&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;+&lt;/span&gt;     &lt;span style="color: #000000;"&gt;escape(sStatus)&lt;/span&gt;     &lt;span style="color: #000000;"&gt;+&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;&amp;amp;sProcessResult=&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;+&lt;/span&gt;     &lt;span style="color: #000000;"&gt;escape(document.getElementById(&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;btProcessResult&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;).value)&lt;/span&gt;     &lt;span style="color: #000000;"&gt;+&lt;/span&gt;     &lt;span style="color: #000000;"&gt;       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;&amp;amp;sReStore=&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;+&lt;/span&gt;     &lt;span style="color: #000000;"&gt;escape(document.getElementById(&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;btReStore&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;).value),&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;     &lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlhttp.setRequestHeader(&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;Content-Type&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;,&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;text/xml&lt;/span&gt;     &lt;span style="color: #000000;"&gt;"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlhttp.send(xmlDom.xml);&lt;br /&gt;&lt;/span&gt;   &lt;/div&gt; 服务端需要从请求流中,解析出客户端传入的xml的内容,服务端代码:&lt;br /&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.IO.Stream&amp;nbsp;instream&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Page.Request.InputStream;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BinaryReader&amp;nbsp;br&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;BinaryReader(instream,System.Text.Encoding.UTF8);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;&lt;span style="color: #000000;"&gt;[]&amp;nbsp;byt&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;br.ReadBytes((&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;)instream.Length);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sXml&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;System.Text.Encoding.UTF8.GetString(byt);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Xml.XmlDocument&amp;nbsp;xmlDoc&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;System.Xml.XmlDocument();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlDoc.LoadXml(sXml);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlElement&amp;nbsp;xe&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;xmlDoc.DocumentElement;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;i&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;i&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;xe.ChildNodes.Count;i&lt;/span&gt;&lt;span style="color: #000000;"&gt;++&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sGuid&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sGuid&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,'&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;xe.ChildNodes[i].InnerText&lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;img src="http://www.cnblogs.com/ice5/aggbug/1772351.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ice5/archive/2010/07/06/1772351.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
