<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_三生石上</title><subtitle type="text">Make Difference - Javascript, Ajax, jQuery, Extjs, Asp.Net, C#</subtitle><id>http://feed.cnblogs.com/blog/u/52411/rss</id><updated>2012-02-11T15:06:38Z</updated><author><name>三生石上</name><uri>http://www.cnblogs.com/sanshi/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sanshi/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/52411/rss"/><entry><id>http://www.cnblogs.com/sanshi/archive/2012/02/11/2347235.html</id><title type="text">[原创]ExtAspNet秘密花园（一） — 为什么选择ExtAspNet？</title><summary type="text">首先来看看ExtAspNet是什么？ExtAspNet 是一组基于 ExtJS 的专业 ASP.NET 2.0 控件库，拥有完善的 AJAX 支持和丰富的界面效果。 ExtAspNet 是为了创建没有 JavaScript，没有 CSS，没有 UpdatePanel，没有 ViewState，没有 WebServices 的网站应用程序。从这段官方描述中，我们看到了三个信息点：基于ExtJS。大家都知道ExtJS是一个很绚丽的JavaScript控件库，非常适合进行各种管理系统的开发。但是对于很多开发者而言，写上一堆一堆的JavaScript代码无疑是一个噩梦。ASP.NET2.0控件库。大家</summary><published>2012-02-11T15:06:00Z</published><updated>2012-02-11T15:06:00Z</updated><author><name>三生石上</name><uri>http://www.cnblogs.com/sanshi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sanshi/archive/2012/02/11/2347235.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sanshi/archive/2012/02/11/2347235.html"/><content type="html">&lt;p&gt;&lt;strong&gt;首先来看看ExtAspNet是什么？&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;ExtAspNet 是一组基于 ExtJS 的专业 ASP.NET 2.0 控件库，拥有完善的 AJAX 支持和丰富的界面效果。 &lt;br /&gt;ExtAspNet 是为了创建没有 JavaScript，没有 CSS，没有 UpdatePanel，没有 ViewState，没有 WebServices 的网站应用程序。&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;从这段官方描述中，我们看到了三个信息点：&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;基于ExtJS。大家都知道ExtJS是一个很&lt;strong&gt;绚丽&lt;/strong&gt;的JavaScript控件库，非常适合进行各种管理系统的开发。但是对于很多开发者而言，写上一堆一堆的JavaScript代码无疑是一个噩梦。&lt;/li&gt;&#xD;
&lt;li&gt;ASP.NET2.0控件库。大家都知道ASP.NET的WebForm开发的最大优点是&lt;strong&gt;快速&lt;/strong&gt;开发，而ViewState则是这种快速开发的基石，使得我们使用C#代码操作页面上控件的任何属性。它的缺点也很明显，在Web2.0的时代每次都是整个页面回发（PostBack）显然过于落伍，并且默认的控件外观过于简陋。由于ExtAspNet是基于ASP.NET2.0的控件库，所以可以自由地应用到DotnetFramework2.0、3.5、4.0的项目中。&lt;/li&gt;&#xD;
&lt;li&gt;ExtAspNet则是将ExtJS和ASP.NET进行深度整合的产物。大量基于JavaScript和CSS却不需要程序员编写JavaScript和CSS；原生的AJAX支持却不需要依赖ASP.NET AJAX的UpdatePanel；快速的ASP.NET开发模式却不需要ViewState的参与。最终ExtAspNet剩下的只是&lt;strong&gt;简单&lt;/strong&gt;的ASP.NET控件。学习ExtAspNet只需要你有ASP.NET的开发基础，不需要事先学习ExtJS，因为ExtAspNet是一个深度封装的控件库。&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;最终，我们可以给出如下一个简单的公式：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: x-small;"&gt;ExtAspNet控件库 = 绚丽的ExtJS界面 + 快速的ASP.NET开发 + 简单的代码编写&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202112306125791.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="ExtAspNet" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202112306126381.png" alt="ExtAspNet" width="679" height="500" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;ExtAspNet的设计理念&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;一切为了简单。&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;ExtAspNet最初的设计目的就是让ASP.NET开发人员在不需要了解JavaScript和ExtJS的情况下快速开发出漂亮的Web2.0应用。因此每个控件的编写都尽量符合ASP.NET的开发习惯，从控件和属性的命名到复杂的AJAX交互，都让传统的ASP.NET开发人员感到很舒服，这也是ExtAspNet经过四年的风雨历程仍然深受广大开发者喜爱的原因。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;用心实现80%的功能。&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;ExtAspNet最初是项目驱动的管理系统的开发，因此控件的开发优先级都是服务于项目的需要，对常见的80%的功能进行精雕细琢的设计开发，并独创了很多服务于实际需求的功能，比如原生的AJAX支持、轻量级的数据传输以及基于IFrame的页面框架。因此ExtAspNet不会追求对ExtJS进行完全的封装，但是会在80%的常见功能上进行细致入微的设计和思考。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;创新所以独一无二。&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;ExtAspNet能够在高手如林的ASP.NET控件库领域拥有一席之地，靠的不是漂亮的脸蛋或者复杂的功能，而是简单而实用的创新。正如前文提到的那样，原生的AJAX支持使得ASP.NET开发人员根本没有意识到自己开发的程序是Web2.0的无刷新风格，因为编写的代码和传统的ASP.NET代码几乎一样；轻量级的数据传输完全抛弃了不适合AJAX的ViewState，而是自创了XState进行数据传输，从而减少网络流量；基于IFrame的页面框架更是给开发人员一个分而治之的设计模式，弹出窗体不在局限于IFrame框框中。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;为什么选择ExtAspNet？&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1. 快速的项目开发&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;基于您熟悉的 C# 和 ASP.NET 2.0 开发模式，不需要 JavaScript 代码就能完成真正的 Web 2.0 应用。不仅能够极大的减少开发时间和降低开发成本，而且方面维护升级。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2. 基于现有的ASP.NET知识&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;虽然 ExtAspNet 是基于 ExtJS的控件库，但是不需要你事先了解 ExtJS 的知识，因为 ExtAspNet 完全按照 ASP.NET 的命名习惯和开发流程完成，你甚至会发现有些控件的属性，方法和事件和原生的 ASP.NET 控件一模一样。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3. 丰富的控件库&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;超过 50 个专业的 ASP.NET 控件，不仅帮助您快速实现业务逻辑，而且让页面更加生动和华丽。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;4. 跨浏览器支持&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;ExtAspNet 使用 C# 替代传统的 JavaScript 开发，不仅提高了开发效率，而且确保在所有主流的浏览器下流畅运行。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5. 多皮肤支持&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;ExtAspNet 不仅内置 3 种不同风格的界面皮肤，而且允许您自定义自己的皮肤，满足项目的个性化需求。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;6. 页面无刷新&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;所有的页面回发都不会导致整个页面重新渲染，而只有部分页面得到更新。而这个 AJAX 过程对开发人员完全透明，您可以向往常一样在服务器端改变控件属性，而这个修改会直接反映更新到前台页面，而不需要任何额外的代码。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;7. 轻量级的数据传输&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;ViewSate 是 WebForm 开发模式的基石，带来便利的同时也增大了数据传输。 ExtAspNet 独创的 XState 实现，不仅保留便利而且极大的减少了数据的传输量。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;8. 丰富的示例教程&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;超过 100 个示例和丰富的教程让你全面掌握 ExtAspNet 的各种用法。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;9. 全中文支持&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;从实例教程，到BBS论坛，再到QQ群，全程中文社区，让你再无语言障碍。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;10. 开源免费&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;ExtAspNet 可以免费应用于任何非商业或者商业性的项目，采用对商业应用友好的Apache License 2.0协议。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;ExtAspNet与ExtJS，ExtNet，ExtJsExtender的区别？&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;ExtJS&lt;/strong&gt;是纯JavaScript的控件库，所以适用于后台为PHP，ASP.NET或者JSP的项目，并且是ExtAspNet和其他库的基础。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;ExtNet&lt;/strong&gt;是国外一家公司开发的基于ExtJS的ASP.NET控件库，从功能上讲比较完善，不过开发模型相对复杂，如果你喜欢ExtNet的开发风格或者需要使用ASP.NET MVC，可以尝试这个控件库。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;ExtJsExtender&lt;/strong&gt;是一个比较早的基于ExtJS的ASP.NET控件库，但是功能过于简陋，长期没有更新，并且对ASP.NET AJAX有依赖。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;ExtAspNet&lt;/strong&gt;是一组基于ExtJS的ASP.NET控件库，也是本系列文章的主角。最大的优点就是简单实用。基于ASP.NET2.0，项目中只需要引用一个ExtAspNet的DLL，没有其他依赖。还要注意ExtAspNet只适合WebForm的项目，不适合ASP.NET MVC的项目。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;ExtAspNet的许可协议&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;从ExtAspNet v3.1.0开始，ExtAspNet采用对商业应用友好的&lt;a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank"&gt;Apache License 2.0&lt;/a&gt;。&lt;a href="http://www.cnblogs.com/sanshi/archive/2012/02/11/2347006.html" target="_blank"&gt;参考这篇文章&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;注：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ol&gt;&lt;ol&gt;&#xD;
&lt;li&gt;ExtAspNet v3.1.0之前的版本使用的是GPL v2授权协议。&lt;/li&gt;&#xD;
&lt;li&gt;ExtAspNet授权协议仅适用于ExtAspNet应用程序本身。&lt;/li&gt;&#xD;
&lt;li&gt;由于ExtAspNet是基于ExtJS的应用，所以如果您在商业应用中使用了ExtAspNet，请向ExtJS官方购买商业授权。&lt;/li&gt;&#xD;
&lt;/ol&gt;&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;ExtAspNet社区交流&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;示例：&lt;a href="http://extasp.net/"&gt;http://extasp.net/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;论坛：&lt;a href="http://bbs.extasp.net/"&gt;http://bbs.extasp.net/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;开源：&lt;a href="http://extaspnet.codeplex.com/"&gt;http://extaspnet.codeplex.com/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;博客：&lt;a href="http://sanshi.cnblogs.com/"&gt;http://sanshi.cnblogs.com/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;小组：&lt;a href="http://home.cnblogs.com/group/extaspnet/"&gt;http://home.cnblogs.com/group/extaspnet/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;你也可以从博客中查找ExtAspNet的QQ交流群。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;注：本系列文章由&lt;a href="http://sanshi.cnblogs.com/" target="_blank"&gt;三生石上&lt;/a&gt;原创，博客园首发，转载请注明出处。如果你喜欢本系列文章，请一定不要忘记&lt;strong&gt;推荐本文&lt;/strong&gt;或者&lt;strong&gt;关注博主&lt;/strong&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/sanshi/archive/2012/01/28/2330677.html" target="_blank"&gt;《ExtAspNet秘密花园》系列文章目录&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/sanshi/aggbug/2347235.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sanshi/archive/2012/02/11/2347235.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/sanshi/archive/2012/02/11/2347006.html</id><title type="text">不仅开源，而且对企业应用完全免费！ExtAspNet弃用GPL v2，拥抱Apache License 2.0</title><summary type="text">提出问题ExtAspNet开源以来，一直坚持开源免费的原则，但是其GPL v2的协议也让有些开发者感到为难，比如有人提到这个问题：http://www.cnblogs.com/sanshi/archive/2012/02/05/2339242.html为了进一步明确ExtAspNet开源免费的原则（不仅是对个人开发者开源免费，而且对企业商业应用开源免费），我们查阅了ExtJS的授权协议，并且对比了各种不同的开源协议，最终选择了Apache License 2.0，也为您以后的商业应用免除后顾之忧。分析问题首先来看ExtJS的授权协议：ExtJS Open Source LicenseSench</summary><published>2012-02-11T12:05:00Z</published><updated>2012-02-11T12:05:00Z</updated><author><name>三生石上</name><uri>http://www.cnblogs.com/sanshi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sanshi/archive/2012/02/11/2347006.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sanshi/archive/2012/02/11/2347006.html"/><content type="html">&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;&lt;strong&gt;提出问题&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;ExtAspNet开源以来，一直坚持开源免费的原则，但是其GPL v2的协议也让有些开发者感到为难，比如有人提到这个问题：&lt;a href="http://www.cnblogs.com/sanshi/archive/2012/02/05/2339242.html"&gt;http://www.cnblogs.com/sanshi/archive/2012/02/05/2339242.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;为了进一步明确ExtAspNet开源免费的原则（不仅是对个人开发者开源免费，而且对企业商业应用开源免费），我们查阅了ExtJS的授权协议，并且对比了各种不同的开源协议，最终选择了Apache License 2.0，也为您以后的商业应用免除后顾之忧。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;&lt;strong&gt;分析问题&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;首先来看&lt;a href="http://www.sencha.com/products/extjs/license/"&gt;ExtJS的授权协议&lt;/a&gt;：&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;strong&gt;ExtJS Open Source License&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Sencha is an avid supporter of open source software.&lt;strong&gt; Our open source license is the appropriate option if you are creating an open source application under a license compatible with the &lt;a href="http://www.gnu.org/copyleft/gpl.html"&gt;GNU GPL license v3&lt;/a&gt;.&lt;/strong&gt; Although the GPLv3 has many terms, the most important is that you must provide the source code of your application to your users so they can be free to modify your application for their own needs.&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;也就是说，基于ExtJS的开源应用可以使用&lt;a href="http://www.gnu.org/philosophy/license-list.html#GPLCompatibleLicenses"&gt;兼容GPL v3的开源协议&lt;/a&gt;，我们查阅了相关文档，发现有很多对商业应用友好的协议：&lt;/p&gt;&#xD;
&lt;dl&gt;&lt;dt&gt;&lt;/dt&gt;&lt;dt&gt;&lt;/dt&gt;&lt;dt&gt;&lt;/dt&gt;&lt;dt style="margin-left: 30px;"&gt;&lt;a id="LGPLv3" href="http://www.gnu.org/licenses/lgpl.html"&gt;GNU Lesser General Public License (LGPL) version 3&lt;/a&gt;&lt;/dt&gt;&lt;dd style="margin-left: 30px;"&gt;&#xD;
&lt;p&gt;This is the latest version of the LGPL: a free software license, but not a strong copyleft license, because it permits linking with non-free modules. It is compatible with GPLv3. We recommend it for special circumstances only.&lt;/p&gt;&#xD;
&lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt style="margin-left: 30px;"&gt;&lt;a id="apache2" href="http://www.apache.org/licenses/LICENSE-2.0"&gt;Apache License, Version 2.0&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;&#xD;
&lt;p&gt;This is a free software license, compatible with version 3 of the GPL.&lt;/p&gt;&#xD;
&lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt style="margin-left: 30px;"&gt;&lt;a id="ModifiedBSD" href="http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5"&gt;Modified BSD license&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;&#xD;
&lt;p&gt;This is the original BSD license, modified by removal of the advertising clause. It is a simple, permissive non-copyleft free software license, compatible with the GNU GPL.&lt;/p&gt;&#xD;
&lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt style="margin-left: 30px;"&gt;&lt;a id="MPL-2.0" href="http://www.mozilla.org/MPL/2.0/"&gt;Mozilla Public License (MPL) version 2.0&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;&#xD;
&lt;p style="margin-left: 30px;"&gt;This is a free software license. Section 3.3 provides indirect compatibility between this license and the GNU GPL version 2.0, the GNU LGPL version 2.1, the GNU AGPL version 3.0, and all later versions of those licenses.&lt;/p&gt;&#xD;
&lt;/dd&gt;&lt;/dl&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;到底该选择哪个呢？关于这几种协议的对比，有一些中文文档：&lt;a href="http://wenku.baidu.com/view/adc6de335a8102d276a22fa5.html"&gt;文档一&lt;/a&gt;，&lt;a href="http://www.awflasher.com/blog/archives/939"&gt;文档二&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这几种协议中，我比较熟悉的还是&lt;a href="http://www.apache.org/licenses/LICENSE-2.0"&gt;Apache License 2.0&lt;/a&gt;，因为我们身边的很多应用都是使用的Apache License 2.0，比如Http Server、Tomcat、Maven、Subversion、Structs、Hadoop，我们来看看其中文的简单定义：&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Apache Licence 2.0&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似，同样鼓励代码共享和尊重原作者的著作权，同样允许代码修改，再发布（作为开源或商业软件）。需要满足的条件也和BSD类似：&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;需要给代码的用户一份Apache Licence&lt;/li&gt;&#xD;
&lt;li&gt;如果你修改了代码，需要再被修改的文件中说明。&lt;/li&gt;&#xD;
&lt;li&gt;在延伸的代码中（修改和有源代码衍生的代码中）需要带有原来代码中的协议，商标，专利声明和其他原来作者规定需要包含的说明。&lt;/li&gt;&#xD;
&lt;li&gt;如果再发布的产品中包含一个Notice文件，则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可，但不可以表现为对Apache Licence构成更改。&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;到底该选择哪一种呢？一时还拿不定主意。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;&lt;strong&gt;解决问题&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;后来，无意中发现的&lt;a href="http://www.oschina.net/news/18070/poll-open-source-license-usage"&gt;一篇文章&lt;/a&gt;（&lt;a href="http://java.dzone.com/polls/poll-open-source-license-usage"&gt;英文版&lt;/a&gt;）让我坚定了使用Apache License 2.0的决心。&lt;/p&gt;&#xD;
&lt;p&gt;我们来看下这组数据：&lt;/p&gt;&#xD;
&lt;div style="padding-left: 2em;"&gt;&lt;strong&gt;开源开发者首选的授权协议：&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt; 1.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GPL (68.9%) &lt;br /&gt;2.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Apache License (7.6%) &lt;br /&gt;3.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LGPL (6.7%) &lt;br /&gt;4.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BSD License (5.3%) &lt;br /&gt;5.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MIT License (4.1%) &lt;br /&gt; &lt;strong&gt;&lt;br /&gt;被下载最多的开源项目：&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt;1.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Apache License (32.7%) &lt;br /&gt;2.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LGPL (21.0%) &lt;br /&gt;3.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GPL (14.4%) &lt;br /&gt;4.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BSD License (3.8%) &lt;br /&gt;5.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MIT License (1.6%)&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;企业应用使用最多的授权协议&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt; 1.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Apache License (15.3%)&lt;br /&gt;2.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MIT License (10.8%)&lt;br /&gt;3.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BSD License (10.5%)&lt;br /&gt;4.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GPL (9.5%)&lt;br /&gt;5.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LGPL (8.9%)&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;此时已经很明朗了，ExtAspNet的应用场景大部分都是企业内管理系统，所以选择被企业使用最多的授权协议无疑是明智的选择，这才有了今天的这个决定：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;strong&gt;&lt;span style="font-size: 18pt;"&gt;从ExtAspNet v3.1.0开始，ExtAspNet将使用对商业应用友好的Apache License 2.0&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://extaspnet.codeplex.com/license"&gt;ExtAspNet授权协议&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: #000000;"&gt;注意：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;&lt;span style="color: #000000;"&gt;ExtAspNet授权协议仅适用于ExtAspNet应用程序本身。&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span style="color: #000000;"&gt;由于ExtAspNet是基于ExtJS的应用，所以如果您在商业应用中使用了ExtAspNet，请向ExtJS官方购买商业授权。&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;喜欢ExtAspNet，快来加入官方交流论坛：&lt;a href="http://bbs.extasp.net/"&gt;http://bbs.extasp.net/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/sanshi/aggbug/2347006.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sanshi/archive/2012/02/11/2347006.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/sanshi/archive/2012/02/10/2346170.html</id><title type="text">ExtAspNet官方示例网站和官方论坛速度归来！</title><summary type="text">鉴于广大网友的强烈要求，ExtAspNet的官方示例网站和官方论坛速度归来：官方示例：http://extasp.net/官方论坛：http://bbs.extasp.net/这次将服务器移到了国内，所以速度大大提升，我这边的访问速度基本维持在4s之内，不知道你们那边的怎么样？虽然ExtAspNet现在已经有8个QQ群了（总人数在2000人左右），并且每天都有很多用户涌向这些群，但是QQ群有个致命弱点，那就是每个QQ群都有人数限制，导致信息过于分散，很多问题在各个QQ群被重复提及，因此一个无人数限制的论坛也是广大网友一直以来的心愿。之前虽然也有官方论坛，但是由于服务器在国外，导致速度极慢经常抽</summary><published>2012-02-10T14:31:00Z</published><updated>2012-02-10T14:31:00Z</updated><author><name>三生石上</name><uri>http://www.cnblogs.com/sanshi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sanshi/archive/2012/02/10/2346170.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sanshi/archive/2012/02/10/2346170.html"/><content type="html">&lt;p&gt;鉴于广大网友的强烈要求，ExtAspNet的官方示例网站和官方论坛速度归来：&lt;/p&gt;&#xD;
&lt;p&gt;官方示例：&lt;a href="http://extasp.net/"&gt;http://extasp.net/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;官方论坛：&lt;a href="http://bbs.extasp.net/"&gt;http://bbs.extasp.net/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这次将服务器移到了国内，所以速度大大提升，我这边的访问速度基本维持在4s之内，不知道你们那边的怎么样？&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;虽然ExtAspNet现在已经有8个QQ群了（总人数在2000人左右），并且每天都有很多用户涌向这些群，但是QQ群有个致命弱点，那就是每个QQ群都有人数限制，导致信息过于分散，很多问题在各个QQ群被重复提及，因此一个无人数限制的论坛也是广大网友一直以来的心愿。&lt;/p&gt;&#xD;
&lt;p&gt;之前虽然也有官方论坛，但是由于服务器在国外，导致速度极慢经常抽风，也形同虚设。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这次，我们特意将服务器移回国内，速度也极大地提升，希望这次的官方论坛能够成为广大ExtAspNet爱好者交流学习的乐园。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;再次，我们诚挚地邀请您加入ExtAspNet官方论坛，为ExtAspNet的发展壮大贡献自己的一份力量：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://bbs.extasp.net/"&gt;http://bbs.extasp.net/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;注：为了防止水文泛滥，官方论坛只能通过QQ账号登陆，这样也免除了大家重新注册账号的麻烦。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/sanshi/aggbug/2346170.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sanshi/archive/2012/02/10/2346170.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/sanshi/archive/2012/02/05/2339242.html</id><title type="text">ExtAspNet v3.0.1</title><summary type="text">这是一个小版本更新，主要修正IE7，IE8下得兼容性问题。欢迎大家将使用中发现的问题以文章评论的形式反馈给我，我会尽可能快地更新版本。========================ExtAspNet - 基于 ExtJS 的专业 ASP.NET 2.0 控件库，拥有完善的 AJAX 支持和丰富的界面效果 ExtAspNet 是一组基于 ExtJS 的专业 ASP.NET 2.0 控件库，拥有完善的 AJAX 支持和丰富的界面效果。ExtAspNet 是为了创建没有 JavaScript，没有 CSS，没有 UpdatePanel，没有 ViewState，没有 WebServices 的网站</summary><published>2012-02-05T12:08:00Z</published><updated>2012-02-05T12:08:00Z</updated><author><name>三生石上</name><uri>http://www.cnblogs.com/sanshi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sanshi/archive/2012/02/05/2339242.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sanshi/archive/2012/02/05/2339242.html"/><content type="html">&lt;p&gt;这是一个小版本更新，主要修正IE7，IE8下得兼容性问题。欢迎大家将使用中发现的问题以文章评论的形式反馈给我，我会尽可能快地更新版本。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;========================&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;ExtAspNet - 基于 ExtJS 的专业 ASP.NET 2.0 控件库，拥有完善的 AJAX 支持和丰富的界面效果&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;ExtAspNet 是一组基于 ExtJS 的专业 ASP.NET 2.0 控件库，拥有完善的 AJAX 支持和丰富的界面效果。&lt;br /&gt;ExtAspNet 是为了创建没有 JavaScript，没有 CSS，没有 UpdatePanel，没有 ViewState，没有 WebServices 的网站应用程序。&lt;br /&gt;&lt;br /&gt;支持的浏览器: IE 7.0+, Firefox 3.6+, Chrome 3.0+, Opera 10.5+, Safari 3.0+&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;开源：http://extaspnet.codeplex.com/&lt;br /&gt;博客：http://sanshi.cnblogs.com/&lt;br /&gt;邮箱: sanshi.ustc@gmail.com&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;发布历史：&lt;br /&gt;&lt;br /&gt;+2012-02-05 v3.0.1&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;-修正IE7、IE8的兼容性问题（dotnet试验田）。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;-修正BUG - 弹出层如果我点击右上角的关闭按钮，再打开就不能打开（用情）。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;-修正上传控件在IE7下的问题（yfen）。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/sanshi/aggbug/2339242.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sanshi/archive/2012/02/05/2339242.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/sanshi/archive/2012/02/05/2338840.html</id><title type="text">[原创]ExtAspNet秘密花园（五） — 功能强大的按钮</title><summary type="text">曾经最普普通通的按钮，在ExtAspNet中摇身一变，法力无边，下面就来看看你曾经最熟悉的按钮？按钮的状态与大小按钮有启用/禁用，按下/正常几种状态，对应的属性分别为Enabled、EnablePress、Pressed三个属性。显示效果如图所示：按钮有大中小三个尺寸，对应的属性为Size，显示效果如下所示：按钮上的图标按钮上的图标可以通过Icon（枚举类型，ExtAspNet内置了很多图标）或者IconUrl两个属性来指定，图标的位置可以位于文本的上下左右四个位置，通过IconAlign属性来指定。对于不显示文字的按钮，只需要指定Icon或者IconUrl属性，而不用指定Text属性即可。按</summary><published>2012-02-05T03:40:00Z</published><updated>2012-02-05T03:40:00Z</updated><author><name>三生石上</name><uri>http://www.cnblogs.com/sanshi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sanshi/archive/2012/02/05/2338840.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sanshi/archive/2012/02/05/2338840.html"/><content type="html">&lt;p&gt;曾经最普普通通的按钮，在ExtAspNet中摇身一变，法力无边，下面就来看看你曾经最熟悉的按钮？&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;按钮的状态与大小&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;按钮有启用/禁用，按下/正常几种状态，对应的属性分别为Enabled、EnablePress、Pressed三个属性。显示效果如图所示：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139524114.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139527494.png" alt="image" width="268" height="93" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;按钮有大中小三个尺寸，对应的属性为Size，显示效果如下所示：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139522.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139524462.png" alt="image" width="236" height="85" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;按钮上的图标&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;按钮上的图标可以通过Icon（枚举类型，ExtAspNet内置了&lt;a href="http://extasp.net/config/icons.htm" target="_blank"&gt;很多图标&lt;/a&gt;）或者IconUrl两个属性来指定，图标的位置可以位于文本的上下左右四个位置，通过IconAlign属性来指定。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;对于不显示文字的按钮，只需要指定Icon或者IconUrl属性，而不用指定Text属性即可。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139535019.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139531987.png" alt="image" width="217" height="246" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;按钮的点击事件&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;默认按钮的点击会触发一次AJAX的回发，典型的代码示例如下：&lt;/p&gt;&#xD;
&lt;pre &gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:Button&lt;/span&gt; &lt;span &gt;ID&lt;/span&gt;&lt;span &gt;="btnServerClick"&lt;/span&gt; &lt;span &gt;Text&lt;/span&gt;&lt;span &gt;="服务器端事件"&lt;/span&gt; &lt;span &gt;OnClick&lt;/span&gt;&lt;span &gt;="btnServerClick_Click"&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:Button&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre &gt;&lt;/pre&gt;&#xD;
&lt;style&gt;&lt;!--&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
--&gt;&lt;/style&gt;&#xD;
&lt;pre &gt;&lt;span &gt;protected&lt;/span&gt; &lt;span &gt;void&lt;/span&gt; btnServerClick_Click(&lt;span &gt;object&lt;/span&gt; sender, EventArgs e)&#xD;
{&#xD;
    &lt;span &gt;// 事件处理&lt;/span&gt;&#xD;
}&lt;/pre&gt;&#xD;
&lt;style&gt;&lt;!--&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
--&gt;&lt;/style&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果希望在客户端通过JavaScript代码来处理按钮的点击事件，需要设置EnablePostBack和OnClientClick两个属性，典型的代码如下所示：&lt;/p&gt;&#xD;
&lt;pre &gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:Button&lt;/span&gt; &lt;span &gt;ID&lt;/span&gt;&lt;span &gt;="btnClientClick"&lt;/span&gt; &lt;span &gt;Text&lt;/span&gt;&lt;span &gt;="客户端事件"&lt;/span&gt; &lt;span &gt;OnClientClick&lt;/span&gt;&lt;span &gt;="alert('这是客户端事件');"&lt;/span&gt; &lt;span &gt;EnablePostBack&lt;/span&gt;&lt;span &gt;="false"&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:Button&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;style&gt;&lt;!--&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
--&gt;&lt;/style&gt;&#xD;
&lt;p&gt;有时，我们希望在服务器端通过C#代码注册客户端的事件脚本，典型代码如下所示：&lt;/p&gt;&#xD;
&lt;pre &gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:Button&lt;/span&gt; &lt;span &gt;ID&lt;/span&gt;&lt;span &gt;="btnClientClick2"&lt;/span&gt; &lt;span &gt;Text&lt;/span&gt;&lt;span &gt;="服务器端生成的客户端事件"&lt;/span&gt; &lt;span &gt;EnablePostBack&lt;/span&gt;&lt;span &gt;="false"&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:Button&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre &gt;&lt;/pre&gt;&#xD;
&lt;style&gt;&lt;!--&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
--&gt;&lt;/style&gt;&#xD;
&lt;pre &gt;&lt;span &gt;protected&lt;/span&gt; &lt;span &gt;void&lt;/span&gt; Page_Load(&lt;span &gt;object&lt;/span&gt; sender, EventArgs e)&#xD;
{&#xD;
    &lt;span &gt;if&lt;/span&gt; (!IsPostBack)&#xD;
    {&#xD;
        btnClientClick2.OnClientClick = Alert.GetShowInTopReference(&lt;span &gt;"这是在服务器端生成的客户端事件"&lt;/span&gt;);&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&lt;pre &gt;&lt;/pre&gt;&#xD;
&lt;pre &gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;按钮点击事件的一个隐藏特性&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;style&gt;&lt;!--&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
--&gt;&lt;/style&gt;&#xD;
&lt;p&gt;在使用ASP.NET的按钮编程时，我们经常需要额外处理一个情况：&lt;strong&gt;防止按钮的重复提交！&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;而这个特性已经内置在ExtAspNet的按钮中，并且公开了一个属性DisableControlBeforePostBack（默认已经启用这个功能），是不是很方便，ExtAspNet的细腻之处很多都体现在这些非常实用的功能上，后面你会在Grid、DropDownList、Window等很多控件上看到类似的手笔。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img  style="border-style: none;" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139538083.png" alt="太棒了" /&gt;&lt;img  style="border-style: none;" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139538083.png" alt="太棒了" /&gt;&lt;img  style="border-style: none;" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139538083.png" alt="太棒了" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;ExtAspNet是怎么做到这一点的呢？&lt;/p&gt;&#xD;
&lt;p&gt;道理也非常简单，在Web.config中打开DebugMode参数，然后查看页面的HTML源代码，你会发现如下的脚本：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139538640.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139533656.png" alt="image" width="404" height="215" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在AJAX的响应正文，会再次启用这个按钮：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139534213.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139537593.png" alt="image" width="404" height="156" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;客户端验证表单&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;按钮的一个主要用途是提交表单，以前我们或许要写一堆JavaScript代码了验证每个表单控件，然后在点击按钮回发之前弹出错误提示框。在ExtAspNet的应用场景中，我们只需要为每个控件设置验证规则，然后设置按钮需要验证哪个表单或者哪些表单，这是通过ValidateForms属性来实现的。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果需要验证多个表单，只需要将这些表单的ID以逗号分隔的形式设置到ValidateForms属性即可。可以查看&lt;a href="http://extasp.net/form/form.aspx" target="_blank"&gt;这个示例&lt;/a&gt;页面。&lt;/p&gt;&#xD;
&lt;pre &gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:Button&lt;/span&gt; &lt;span &gt;ID&lt;/span&gt;&lt;span &gt;="btnSubmitAll"&lt;/span&gt; &lt;span &gt;Text&lt;/span&gt;&lt;span &gt;="验证两个表单并提交"&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt; &lt;span &gt;OnClick&lt;/span&gt;&lt;span &gt;="btnSubmitAll_Click" &lt;/span&gt;&lt;span &gt;ValidateForms&lt;/span&gt;&lt;span &gt;="extForm1,extForm2"&lt;/span&gt; &lt;span &gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre &gt;&lt;/pre&gt;&#xD;
&lt;style&gt;&lt;!--&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
--&gt;&lt;/style&gt;&#xD;
&lt;p&gt;在客户端验证失败时，会显示如下的提示框，并阻止本次表单提交：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139531737.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139545118.png" alt="image" width="404" height="189" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果你采用类似示例站点的IFrame框架结构，一定不要错过另一个属性ValidateTarget，它指定了错误提示框显示的位置，可以是本页面也可以是父页面。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;带有菜单的按钮&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;按钮也可以拥有自己的菜单，&lt;a href="http://extasp.net/button/button_menu.aspx" target="_blank"&gt;这个示例&lt;/a&gt;的效果图如下所示：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139545674.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139546231.png" alt="image" width="314" height="141" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;ASPX页面的标签也非常干净利落:&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre&gt;&lt;span &gt;   1:  &lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:Button&lt;/span&gt; &lt;span &gt;ID&lt;/span&gt;&lt;span &gt;="btnMenu"&lt;/span&gt; &lt;span &gt;Text&lt;/span&gt;&lt;span &gt;="中国科学技术大学"&lt;/span&gt; &lt;span &gt;EnablePostBack&lt;/span&gt;&lt;span &gt;="false"&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   2:  &lt;/span&gt;    &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;Menu&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   3:  &lt;/span&gt;        &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:MenuHyperLink&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt; &lt;span &gt;Icon&lt;/span&gt;&lt;span &gt;="TagGreen"&lt;/span&gt; &lt;span &gt;Target&lt;/span&gt;&lt;span &gt;="_blank"&lt;/span&gt; &lt;span &gt;NavigateUrl&lt;/span&gt;&lt;span &gt;="http://scms.ustc.edu.cn/"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   4:  &lt;/span&gt;            &lt;span &gt;Text&lt;/span&gt;&lt;span &gt;="化学与材料科学学院"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   5:  &lt;/span&gt;        &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:MenuHyperLink&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   6:  &lt;/span&gt;        &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:MenuHyperLink&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt; &lt;span &gt;Icon&lt;/span&gt;&lt;span &gt;="TagBlue"&lt;/span&gt; &lt;span &gt;Target&lt;/span&gt;&lt;span &gt;="_blank"&lt;/span&gt; &lt;span &gt;NavigateUrl&lt;/span&gt;&lt;span &gt;="http://business.ustc.edu.cn/zh_CN/"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   7:  &lt;/span&gt;            &lt;span &gt;Text&lt;/span&gt;&lt;span &gt;="管理学院"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   8:  &lt;/span&gt;            &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;Menu&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   9:  &lt;/span&gt;                &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:MenuHyperLink&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt; &lt;span &gt;Icon&lt;/span&gt;&lt;span &gt;="TagPink"&lt;/span&gt; &lt;span &gt;Target&lt;/span&gt;&lt;span &gt;="_blank"&lt;/span&gt; &lt;span &gt;NavigateUrl&lt;/span&gt;&lt;span &gt;="http://is.ustc.edu.cn/"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  10:  &lt;/span&gt;                    &lt;span &gt;Text&lt;/span&gt;&lt;span &gt;="工商管理系"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  11:  &lt;/span&gt;                &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:MenuHyperLink&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  12:  &lt;/span&gt;                &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:MenuHyperLink&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt; &lt;span &gt;Icon&lt;/span&gt;&lt;span &gt;="TagPurple"&lt;/span&gt; &lt;span &gt;Target&lt;/span&gt;&lt;span &gt;="_blank"&lt;/span&gt; &lt;span &gt;NavigateUrl&lt;/span&gt;&lt;span &gt;="http://stat.ustc.edu.cn/"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  13:  &lt;/span&gt;                    &lt;span &gt;Text&lt;/span&gt;&lt;span &gt;="统计与金融系"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  14:  &lt;/span&gt;                &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:MenuHyperLink&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  15:  &lt;/span&gt;            &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;Menu&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  16:  &lt;/span&gt;        &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:MenuHyperLink&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  17:  &lt;/span&gt;    &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;Menu&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  18:  &lt;/span&gt;&lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:Button&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;style&gt;&lt;!--&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
--&gt;&lt;/style&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;工具栏中的按钮&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;按钮不仅可以单独使用，在表单中作为提交按钮，当放在工具栏中时，它摇身一变成了一个工具栏项。这样我们不仅可以设置按钮工具栏项的状态、添加点击事件、验证表单，而且还可以添加菜单，如下所示：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139548739.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139545707.png" alt="image" width="404" height="130" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;ASPX页面标签如下：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre&gt;&lt;span &gt;   1:  &lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:Panel&lt;/span&gt; &lt;span &gt;ShowBorder&lt;/span&gt;&lt;span &gt;="true"&lt;/span&gt; &lt;span &gt;BodyPadding&lt;/span&gt;&lt;span &gt;="5px"&lt;/span&gt; &lt;span &gt;Height&lt;/span&gt;&lt;span &gt;="300px"&lt;/span&gt; &lt;span &gt;Width&lt;/span&gt;&lt;span &gt;="450px"&lt;/span&gt; &lt;span &gt;ShowHeader&lt;/span&gt;&lt;span &gt;="false"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   2:  &lt;/span&gt;    &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   3:  &lt;/span&gt;    &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;Toolbars&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   4:  &lt;/span&gt;        &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:Toolbar&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   5:  &lt;/span&gt;            &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;Items&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   6:  &lt;/span&gt;                &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:ToolbarText&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt; &lt;span &gt;Text&lt;/span&gt;&lt;span &gt;="内联项："&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   7:  &lt;/span&gt;                &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:ToolbarText&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   8:  &lt;/span&gt;                &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:ToolbarSeparator&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   9:  &lt;/span&gt;                &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:ToolbarSeparator&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  10:  &lt;/span&gt;                &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:Button&lt;/span&gt; &lt;span &gt;EnablePostBack&lt;/span&gt;&lt;span &gt;="false"&lt;/span&gt; &lt;span &gt;Text&lt;/span&gt;&lt;span &gt;="中国科学技术大学"&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  11:  &lt;/span&gt;                    &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;Menu&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  12:  &lt;/span&gt;                        &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:MenuHyperLink&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt; &lt;span &gt;Target&lt;/span&gt;&lt;span &gt;="_blank"&lt;/span&gt; &lt;span &gt;NavigateUrl&lt;/span&gt;&lt;span &gt;="http://scms.ustc.edu.cn/"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  13:  &lt;/span&gt;                            &lt;span &gt;Text&lt;/span&gt;&lt;span &gt;="化学与材料科学学院"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  14:  &lt;/span&gt;                        &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:MenuHyperLink&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  15:  &lt;/span&gt;                        &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:MenuHyperLink&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt; &lt;span &gt;Target&lt;/span&gt;&lt;span &gt;="_blank"&lt;/span&gt; &lt;span &gt;NavigateUrl&lt;/span&gt;&lt;span &gt;="http://business.ustc.edu.cn/zh_CN/"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  16:  &lt;/span&gt;                            &lt;span &gt;Text&lt;/span&gt;&lt;span &gt;="管理学院"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  17:  &lt;/span&gt;                            &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;Menu&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  18:  &lt;/span&gt;                                &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:MenuHyperLink&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt; &lt;span &gt;Target&lt;/span&gt;&lt;span &gt;="_blank"&lt;/span&gt; &lt;span &gt;NavigateUrl&lt;/span&gt;&lt;span &gt;="http://is.ustc.edu.cn/"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  19:  &lt;/span&gt;                                    &lt;span &gt;Text&lt;/span&gt;&lt;span &gt;="工商管理系"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  20:  &lt;/span&gt;                                &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:MenuHyperLink&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  21:  &lt;/span&gt;                                &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:MenuHyperLink&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt; &lt;span &gt;Target&lt;/span&gt;&lt;span &gt;="_blank"&lt;/span&gt; &lt;span &gt;NavigateUrl&lt;/span&gt;&lt;span &gt;="http://stat.ustc.edu.cn/"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  22:  &lt;/span&gt;                                    &lt;span &gt;Text&lt;/span&gt;&lt;span &gt;="统计与金融系"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  23:  &lt;/span&gt;                                &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:MenuHyperLink&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  24:  &lt;/span&gt;                            &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;Menu&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  25:  &lt;/span&gt;                        &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:MenuHyperLink&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  26:  &lt;/span&gt;                    &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;Menu&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  27:  &lt;/span&gt;                &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:Button&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  28:  &lt;/span&gt;            &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;Items&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  29:  &lt;/span&gt;        &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:Toolbar&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  30:  &lt;/span&gt;    &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;Toolbars&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  31:  &lt;/span&gt;&lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:Panel&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;style&gt;&lt;!--&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
--&gt;&lt;/style&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;点击按钮前的确认对话框&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果我们希望在点击按钮的时候首先弹出确认对话框（类似于JavaScript的window.confirm），在征得用户的同意后再触发按钮的默认行为，该怎么办？&lt;/p&gt;&#xD;
&lt;p&gt;ExtAspNet也考虑到了这种需求，特意提供了如下几个属性：ConfirmText/ConfirmTitle/ConfirmIcon/ConfirmTarget&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img  style="border-style: none;" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139538083.png" alt="太棒了" /&gt;&lt;img  style="border-style: none;" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139538083.png" alt="太棒了" /&gt;&lt;img  style="border-style: none;" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139538083.png" alt="太棒了" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;一个典型的应用是在数据展示表格的工具栏中，放置一个写着&amp;ldquo;删除选中项&amp;rdquo;的按钮，用来删除表格中选中的项。为了防止用户误操作，我们一般需要首先提醒用户这个操作是不可恢复的操作，是否确认删除。此时按钮的这些属性就派上用场了，请看&lt;a href="http://extasp.net/iframe/grid_iframe.aspx" target="_blank"&gt;这个示例&lt;/a&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201202/20120205113954724.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139544345.png" alt="image" width="404" height="265" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202051139559361.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/20120205113955790.png" alt="image" width="404" height="224" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;小结&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这一篇文章没有涉及很多应用技巧，不过介绍的知识都很实用，如果你打算或者正在使用ExtAspNet，一定不要错过按钮的这些功能。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;下一篇文章我们会对ExtAspNet中基本的表单控件进行简单的学习。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;注：本系列文章由&lt;a href="http://sanshi.cnblogs.com/" target="_blank"&gt;三生石上&lt;/a&gt;原创，博客园首发，转载请注明出处。如果你喜欢本系列文章，请一定不要忘记&lt;strong&gt;推荐本文&lt;/strong&gt;或者&lt;strong&gt;关注博主&lt;/strong&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/sanshi/archive/2012/01/28/2330677.html" target="_blank"&gt;《ExtAspNet秘密花园》系列文章目录&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/sanshi/aggbug/2338840.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sanshi/archive/2012/02/05/2338840.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/sanshi/archive/2012/02/04/2337814.html</id><title type="text">[原创]ExtAspNet秘密花园（四） — 每个页面需要一个PageManager</title><summary type="text">每一个使用ExtAspNet控件的页面都必须包含一个PageManager控件，我们可以把PageManager控件看做页面级别的参数配置（相对于Web.config站点级别的参数配置）。页面级别的参数配置Theme: 控件主题，目前支持三种主题风格（blue/gray/access，默认值：blue）Language: 控件语言（en/zh_CN/zh_TW/...，默认值：zh_CN）FormMessageTarget: 表单字段错误提示信息的显示位置（side/qtip，默认值：side）FormOffsetRight: 表单字段右侧距离边界的宽度（默认值：20px）FormLabelW</summary><published>2012-02-04T03:16:00Z</published><updated>2012-02-04T03:16:00Z</updated><author><name>三生石上</name><uri>http://www.cnblogs.com/sanshi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sanshi/archive/2012/02/04/2337814.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sanshi/archive/2012/02/04/2337814.html"/><content type="html">&lt;p&gt;每一个使用ExtAspNet控件的页面都必须包含一个PageManager控件，我们可以把PageManager控件看做页面级别的参数配置（相对于Web.config站点级别的参数配置）。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;页面级别的参数配置&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;Theme: 控件主题，目前支持三种主题风格（blue/gray/access，默认值：blue）&lt;/li&gt;&#xD;
&lt;li&gt;Language: 控件语言（en/zh_CN/zh_TW/...，默认值：zh_CN）&lt;/li&gt;&#xD;
&lt;li&gt;FormMessageTarget: 表单字段错误提示信息的显示位置（side/qtip，默认值：side）&lt;/li&gt;&#xD;
&lt;li&gt;FormOffsetRight: 表单字段右侧距离边界的宽度（默认值：20px）&lt;/li&gt;&#xD;
&lt;li&gt;FormLabelWidth: 表单字段标签的宽度（默认值：100px）&lt;/li&gt;&#xD;
&lt;li&gt;FormLabelSeparator: 表单字段标签与内容的分隔符（默认值："："）&lt;/li&gt;&#xD;
&lt;li&gt;EnableAjax: 是否启用AJAX（默认值：true）&lt;/li&gt;&#xD;
&lt;li&gt;AjaxTimeout: AJAX超时时间（单位：秒，默认值：60s）&lt;/li&gt;&#xD;
&lt;li&gt;EnableBigFont: 是否启用大字体，将ExtJS默认11px的字体全部改为12px，否则显示的中文字体太小（默认值：false）&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;上面这些参数和Web.config中的一样，只不过作用域在页面范围内，覆盖Web.config中的同名配置。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;还有一些其他配置属性：&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;EnablePageLoading：是否启用页面第一次加载提示，默认为居中显示的加载图标（默认值：true）&lt;/li&gt;&#xD;
&lt;li&gt;EnableAjaxLoading：是否启用AJAX加载提示，默认为位于页面上方的文字提示（默认值：true）&lt;/li&gt;&#xD;
&lt;li&gt;ExecuteOnReadyWhenPostBack：是否在每次页面回发时都执行onReady脚本（默认值：true）&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;虽然ExtAspNet希望开发人员尽可能少地编写JavaScript脚本，但有时恰到好处的脚本可以起到事半功倍的效果，比如&lt;a href="http://extasp.net/" target="_blank"&gt;示例站点&lt;/a&gt;就引入了一个外部的default.js来处理用户点击左侧菜单的事件和地址栏#之后的片段：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre&gt;&lt;span &gt;   1:  &lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;html&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   2:  &lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;body&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   3:  &lt;/span&gt;    &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;form&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   4:  &lt;/span&gt;    &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;form&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   5:  &lt;/span&gt;    &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;script&lt;/span&gt; &lt;span &gt;src&lt;/span&gt;&lt;span &gt;="./js/default.js"&lt;/span&gt; &lt;span &gt;type&lt;/span&gt;&lt;span &gt;="text/javascript"&lt;/span&gt;&lt;span &gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;script&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   6:  &lt;/span&gt;&lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;body&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   7:  &lt;/span&gt;&lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;html&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;style&gt;&lt;!--&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
--&gt;&lt;/style&gt;&#xD;
&lt;p&gt;而default.js中的所有代码都放在一个 &lt;span &gt;function&lt;/span&gt;onReady() {}&lt;/p&gt;&#xD;
&lt;style&gt;&lt;!--&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
--&gt;&lt;/style&gt;&#xD;
&lt;p&gt;的函数体中。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img  style="border-style: none;" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115397149.png" alt="太棒了" /&gt;&lt;img  style="border-style: none;" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115397149.png" alt="太棒了" /&gt;&lt;img  style="border-style: none;" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115397149.png" alt="太棒了" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这其实是ExtAspNet的一个约定，ExtAspNet会在ExtJS以及自身的脚本执行完毕后，查找是否存在onReady函数，如果存在就执行此函数。你可以启用Web.config中的DebugMode，观察生成的页面源代码，在最后你会看到这样的脚本：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115392722.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115394151.png" alt="image" width="364" height="361" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;占据整个页面的面板 - AutoSizePanelID属性&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这是一个你一定不会错过的属性，如果希望某个Panel、Window、Tree、TabStrip、RegionPanel或者Form占据整个页面空间，就需要用到这个属性，还是看看示例站点的写法：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115407215.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115401152.png" alt="image" width="504" height="277" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;让ASP.NET控件也参与ExtAspNet的AJAX回发 - AjaxAspnetControls属性&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们曾在第一篇文章提到，ExtAspNet的一个设计理念是&amp;ldquo;用心实现80%的功能&amp;rdquo;，也就是说肯定会遇到一些ExtAspNet提供的控件无法完成的任务，怎么办？我们只好求助于ASP.NET控件，并且ExtAspNet提供了一种优雅的方式让ASP.NET控件也可以参与AJAX回发过程，这就是AjaxAspnetControls属性。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果想让某个ASP.NET在页面回发时也更新，可以将其ID放在AjaxAspnetControls属性中，多个控件ID以逗号分隔，具体用法请参见&lt;a href="http://extasp.net/aspnet/aspnet.aspx" target="_blank"&gt;示例页面&lt;/a&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img  style="border-style: none;" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115397149.png" alt="太棒了" /&gt;&lt;img  style="border-style: none;" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115397149.png" alt="太棒了" /&gt;&lt;img  style="border-style: none;" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115397149.png" alt="太棒了" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;那么，ExtAspNet是怎么做到这一点的呢？&lt;/p&gt;&#xD;
&lt;p&gt;道理其实很简单，ExtAspNet会在AJAX响应时查找生成的HTML片段中的那些ASP.NET控件，拿到ASP.NET生成的HTML并生成更新脚本，如果你用Firebug等调试工具查看一下AJAX请求，能够很清楚的看到如下交互过程：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115407805.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115402821.png" alt="image" width="504" height="136" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115437611.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115431548.png" alt="image" width="504" height="169" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img  style="border-style: none;" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115397149.png" alt="太棒了" /&gt;&lt;img  style="border-style: none;" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115397149.png" alt="太棒了" /&gt;&lt;img  style="border-style: none;" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115397149.png" alt="太棒了" /&gt;&lt;img  style="border-style: none;" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115397149.png" alt="太棒了" /&gt;&lt;img  style="border-style: none;" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115397149.png" alt="太棒了" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果你能理解上面提到的ExtAspNet的工作原理，可以尝试一下&lt;a href="http://extasp.net/aspnet/aspnet_literal.aspx" target="_blank"&gt;这个示例&lt;/a&gt;。这个示例主要是考察ASP.NET控件Label和Literal在ExtAspNet的AJAX交互过程中的区别，先来看看代码：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre&gt;&lt;span &gt;   1:  &lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:PageManager&lt;/span&gt; &lt;span &gt;ID&lt;/span&gt;&lt;span &gt;="PageManager1"&lt;/span&gt; &lt;span &gt;AjaxAspnetControls&lt;/span&gt;&lt;span &gt;="Label1,Literal1"&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt; &lt;span &gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   2:  &lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;asp:Label&lt;/span&gt; &lt;span &gt;ID&lt;/span&gt;&lt;span &gt;="Label1"&lt;/span&gt; &lt;span &gt;Text&lt;/span&gt;&lt;span &gt;="Label1"&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt;&lt;span &gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;asp:Label&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   3:  &lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;br&lt;/span&gt; &lt;span &gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   4:  &lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;asp:Literal&lt;/span&gt; &lt;span &gt;ID&lt;/span&gt;&lt;span &gt;="Literal1"&lt;/span&gt; &lt;span &gt;Text&lt;/span&gt;&lt;span &gt;="Literal1"&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt;&lt;span &gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;asp:Literal&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   5:  &lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;br&lt;/span&gt; &lt;span &gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   6:  &lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:Button&lt;/span&gt; &lt;span &gt;ID&lt;/span&gt;&lt;span &gt;="Button1"&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt; &lt;span &gt;Text&lt;/span&gt;&lt;span &gt;="更新上面几个文本值"&lt;/span&gt; &lt;span &gt;OnClick&lt;/span&gt;&lt;span &gt;="Button1_Click"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   7:  &lt;/span&gt;&lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:Button&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;style&gt;&lt;!--&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
--&gt;&lt;/style&gt;&#xD;
&lt;style&gt;&lt;!--&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
--&gt;&lt;/style&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre&gt;&lt;span &gt;   1:  &lt;/span&gt;&lt;span &gt;protected&lt;/span&gt; &lt;span &gt;void&lt;/span&gt; Button1_Click(&lt;span &gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   2:  &lt;/span&gt;{&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   3:  &lt;/span&gt;    Label1.Text = &lt;span &gt;"Label1 - "&lt;/span&gt; + DateTime.Now.ToLongTimeString();&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   4:  &lt;/span&gt;    Literal1.Text = &lt;span &gt;"Literal1 - "&lt;/span&gt; + DateTime.Now.ToLongTimeString();&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   5:  &lt;/span&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;style&gt;&lt;!--&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
--&gt;&lt;/style&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果只看这段代码，我们可能会想当然地以为asp:Label和asp:Literal在点击按钮时都被更新了，实际情况却不是这样：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115448517.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115447121.png" alt="image" width="173" height="97" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;为什么只有Label1的值得到更新，而Literal1没有得到更新，看看生成的HTML源代码，再想想ExtAspNet的内部处理过程，你不难发现其中的奥秘。&lt;/p&gt;&#xD;
&lt;p&gt;生成的HTML源代码：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre&gt;&lt;span &gt;   1:  &lt;/span&gt;&amp;lt;span id=&lt;span &gt;"Label1"&lt;/span&gt;&amp;gt;Label1&amp;lt;/span&amp;gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   2:  &lt;/span&gt;&amp;lt;br /&amp;gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   3:  &lt;/span&gt; Literal1&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   4:  &lt;/span&gt;&amp;lt;br /&amp;gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   5:  &lt;/span&gt;&amp;lt;div id=&lt;span &gt;"Button1_wrapper"&lt;/span&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;style&gt;&lt;!--&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
--&gt;&lt;/style&gt;&#xD;
&lt;p&gt;原来asp:Label和asp:Literal生成的HTML代码的格式是不同的，asp:Literal生成的HTML代码没有外部的&amp;lt;span&amp;gt;标签，怪不得ExtAspNet不能通过ID值来查找Literal并更新它的HTML值，那么该怎么呢？&lt;/p&gt;&#xD;
&lt;p&gt;对于这种特殊情况，ExtAspNet没有打算费劲周折来弥补这种缺陷，而是提供了一个简单的解决办法：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201202/201202041115444089.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201202/20120204111544742.png" alt="image" width="604" height="158" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;是不是很好玩&amp;hellip;&amp;hellip;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;小结&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;每个页面都需要一个PageManager控件，它提供了页面级别的参数配置，可以用来覆盖Web.config中的配置。不过最常到的可能是AutoSizePanelID属性，用来将面板扩展到整个页面。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;下一篇文章我们会介绍最常用到的Button控件，ExtAspNet为Button提供了非常丰富的功能。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;注：本系列文章由&lt;a href="http://sanshi.cnblogs.com/" target="_blank"&gt;三生石上&lt;/a&gt;原创，博客园首发，转载请注明出处。如果你喜欢本系列文章，请一定不要忘记&lt;strong&gt;推荐本文&lt;/strong&gt;或者&lt;strong&gt;关注博主&lt;/strong&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/sanshi/archive/2012/01/28/2330677.html" target="_blank"&gt;《ExtAspNet秘密花园》系列文章目录&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/sanshi/aggbug/2337814.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sanshi/archive/2012/02/04/2337814.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/sanshi/archive/2012/01/28/2330677.html</id><title type="text">[原创]ExtAspNet新春贺岁版 - 文件上传控件、复选框列表控件、完善布局管理、表格的行扩展列、完整的100多个中文示例、30多处BUG修正与功能增强、《ExtAspNet秘密花园》系列文章</title><summary type="text">ExtAspNet 是一组基于 ExtJS 的专业 ASP.NET 2.0 控件库，拥有完善的 AJAX 支持和丰富的界面效果。 ExtAspNet 是为了创建没有 JavaScript，没有 CSS，没有 UpdatePanel，没有 ViewState，没有 WebServices 的网站应用程序。从2008年4月开始，ExtAspNet一直在默默地坚持，有过骄傲，有过彷徨，但从未放弃。龙年伊始，我们迎来了ExtAspNet的一个重要更新——V3.0。V3.0包含很多重要的更新，分别列举如下：姗姗来迟的文件上传控件虽然之前可以通过ASP.NET的FileUpload控件来实现同样的功能，但</summary><published>2012-01-28T12:19:00Z</published><updated>2012-01-28T12:19:00Z</updated><author><name>三生石上</name><uri>http://www.cnblogs.com/sanshi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sanshi/archive/2012/01/28/2330677.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sanshi/archive/2012/01/28/2330677.html"/><content type="html">&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;ExtAspNet 是一组基于 ExtJS 的专业 ASP.NET 2.0 控件库，拥有完善的 AJAX 支持和丰富的界面效果。 &lt;br /&gt;ExtAspNet 是为了创建没有 JavaScript，没有 CSS，没有 UpdatePanel，没有 ViewState，没有 WebServices 的网站应用程序。&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;从2008年4月开始，ExtAspNet一直在默默地坚持，有过骄傲，有过彷徨，但从未放弃。龙年伊始，我们迎来了ExtAspNet的一个重要更新&amp;mdash;&amp;mdash;V3.0。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;V3.0包含很多重要的更新，分别列举如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;姗姗来迟的文件上传控件&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201201/201201282001406891.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image_thumb14" src="http://images.cnblogs.com/cnblogs_com/sanshi/201201/201201282001496387.png" alt="image_thumb14" width="404" height="149" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;虽然之前可以通过ASP.NET的FileUpload控件来实现同样的功能，但是有两个问题也一直困扰着广大的热心网友：&lt;/p&gt;&#xD;
&lt;p&gt;1. 文件上传框风格和整个页面风格不搭配。 2. 上传时是整个页面回发，和ExtAspNet默认的AJAX风格也不搭。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这次新增的FileUpload控件完美地解决了这两个问题，并且实现代码非常简单：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre&gt;&lt;span &gt;   1:  &lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:SimpleForm&lt;/span&gt; &lt;span &gt;ID&lt;/span&gt;&lt;span &gt;="SimpleForm1"&lt;/span&gt; &lt;span &gt;BodyPadding&lt;/span&gt;&lt;span &gt;="5px"&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt; &lt;span &gt;EnableBackgroundColor&lt;/span&gt;&lt;span &gt;="true"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   2:  &lt;/span&gt;    &lt;span &gt;ShowBorder&lt;/span&gt;&lt;span &gt;="True"&lt;/span&gt; &lt;span &gt;Title&lt;/span&gt;&lt;span &gt;="表单"&lt;/span&gt; &lt;span &gt;Width&lt;/span&gt;&lt;span &gt;="350px"&lt;/span&gt; &lt;span &gt;ShowHeader&lt;/span&gt;&lt;span &gt;="True"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   3:  &lt;/span&gt;    &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;Items&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   4:  &lt;/span&gt;        &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:TextBox&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt; &lt;span &gt;Label&lt;/span&gt;&lt;span &gt;="用户名"&lt;/span&gt; &lt;span &gt;ID&lt;/span&gt;&lt;span &gt;="tbxUseraName"&lt;/span&gt; &lt;span &gt;Required&lt;/span&gt;&lt;span &gt;="true"&lt;/span&gt; &lt;span &gt;ShowRedStar&lt;/span&gt;&lt;span &gt;="true"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   5:  &lt;/span&gt;        &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:TextBox&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   6:  &lt;/span&gt;        &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:FileUpload&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt; &lt;span &gt;ID&lt;/span&gt;&lt;span &gt;="filePhoto"&lt;/span&gt; &lt;span &gt;EmptyText&lt;/span&gt;&lt;span &gt;="请选择一张照片"&lt;/span&gt; &lt;span &gt;Label&lt;/span&gt;&lt;span &gt;="个人头像"&lt;/span&gt; &lt;span &gt;Required&lt;/span&gt;&lt;span &gt;="true"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   7:  &lt;/span&gt;            &lt;span &gt;ShowRedStar&lt;/span&gt;&lt;span &gt;="true"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   8:  &lt;/span&gt;        &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:FileUpload&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   9:  &lt;/span&gt;        &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;ext:Button&lt;/span&gt; &lt;span &gt;ID&lt;/span&gt;&lt;span &gt;="btnSubmit"&lt;/span&gt; &lt;span &gt;runat&lt;/span&gt;&lt;span &gt;="server"&lt;/span&gt; &lt;span &gt;OnClick&lt;/span&gt;&lt;span &gt;="btnSubmit_Click"&lt;/span&gt; &lt;span &gt;ValidateForms&lt;/span&gt;&lt;span &gt;="SimpleForm1"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  10:  &lt;/span&gt;            &lt;span &gt;Text&lt;/span&gt;&lt;span &gt;="提交"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  11:  &lt;/span&gt;        &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:Button&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  12:  &lt;/span&gt;    &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;Items&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;  13:  &lt;/span&gt;&lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;ext:SimpleForm&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;style&gt;&lt;!--&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
--&gt;&lt;/style&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre&gt;&lt;span &gt;   1:  &lt;/span&gt;&lt;span &gt;protected&lt;/span&gt; &lt;span &gt;void&lt;/span&gt; btnSubmit_Click(&lt;span &gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   2:  &lt;/span&gt;{&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   3:  &lt;/span&gt;    &lt;span &gt;string&lt;/span&gt; fileName = DateTime.Now.Ticks.ToString() + &lt;span &gt;"_"&lt;/span&gt; + filePhoto.FileName;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   4:  &lt;/span&gt;    &lt;span &gt;if&lt;/span&gt; (filePhoto.HasFile)&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   5:  &lt;/span&gt;    {&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   6:  &lt;/span&gt;        filePhoto.SaveAs(Server.MapPath(&lt;span &gt;"~/upload/"&lt;/span&gt; + fileName));&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   7:  &lt;/span&gt;    }&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span &gt;   8:  &lt;/span&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;复选框列表控件&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201201/201201282015107884.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201201/201201282015143330.png" alt="image" width="504" height="298" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;复选框列表控件的使用和单选框列表控件的用法类似，不过V3.0版本增加了必选项客户端验证和竖排复选框的功能。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;完善的布局管理&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;ExtAspNet新增了Table、HBox和VBox三种布局，从而拥有了ExtJS全部的布局管理。这将大大方便开发人员对页面上的控件进行有效地管理。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Table布局：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201201/20120128201516671.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201201/201201282015225235.png" alt="image" width="504" height="306" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;HBox布局：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201201/201201282015244943.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201201/201201282015344571.png" alt="image" width="504" height="166" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;VBox布局：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201201/20120128201535559.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201201/201201282016229939.png" alt="image" width="504" height="256" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;表格的行扩展列&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201201/201201282016465546.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201201/201201282017122256.png" alt="image" width="504" height="206" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;一个看似复杂的功能，对开发人员确实非常简单，只需要向原来的TemplateField增加一个RenderAsRowExpander即可。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201201/201201282017178848.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201201/201201282017265138.png" alt="image" width="504" height="277" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;完整的100多个中文示例&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sanshi/201201/201201282018288088.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/sanshi/201201/2012012820183121.png" alt="image" width="504" height="321" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;ExtAspNet的V3.0对全部的示例进行中文化重构，让你不再有语言的烦恼。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;30多处BUG修正与功能增强&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这里列出ExtAspNet的V3.0完整的更新列表：&lt;/p&gt;&#xD;
&lt;p&gt;+2012-01-28 v3.0 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -修正 TwinTriggerBox 控件输入值后回车出错的问题(李渝川)。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; +Tree 控件增强。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -Tree 控件增加 EnableIcons 属性。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -Tree 控件的 AutoLeafIdentification 属性默认为 true（这是常用属性，不应该每次都设置）。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -Tree 控件增加 SelectedNodeIDArray 属性。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -简化 TreeNode 的内部结构，现在不需要写 Nodes 节点（土豆丝）。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; +Web.config 增强。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -为 Web.config 中的 ExtAspNet 配置节增加 EnableBigFont 配置项，适合于显示中文字体（最小字体由11px改为12px）。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -为 Web.config 中的 ExtAspNet 配置节增加 DebugMode 属性，用于在 ASPX 生成的 HTML 源代码中显示格式化后的 ExtJS 代码，方便调试（vazumi）。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -为 Web.config 中的 ExtAspNet 配置节增加 FormLabelSeparator 属性，同时 SimpleForm 和 From 控件增加 LabelSeparator 属性。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -LabelWidth的默认值改为100px，与extjs保持一致（以前默认是80px）。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; +Button 控件增强。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -修正 Button 设置图标后，CssClass 不起作用的问题。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -Button 增加 IconAlign 属性。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -为 Button 增加 Size 属性，可以设置按钮的大小。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; +表单控件增强。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -HtmlEditor 控件增加 EnableChineseFont 属性，默认为 true（土豆丝）。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -修正位于表单外面的 CheckBox 控件自动回发时的 JavaScript 错误。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -表单字段增加 ShowEmptyLabel 属性（默认为 false），用来控制是否显示空白标签（示例在 /basic/login_captcha.aspx）。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -为 Label HyperLink LinkButton 增加 Tooltip ToolTipTitle ToolTipAutoHide 三个属性，用来显示提示信息。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -为 HyperLink LinkButton 增加 EncodeText 属性。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -为 TextArea 增加 AutoGrowHeightMin 属性。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -为 HyperLinkField 添加属性 DataNavigateUrlFieldsEncode，用来编码地址栏URL。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -修正 Window 的 ESC 按键事件处理和关闭按钮事件处理不一致的情况（sa）。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -简化客户端应用内置图标的方式，以前需要这样的代码 &amp;lt;%= IconHelper.GetIconUrl(Icon.Reload) %&amp;gt;（依然有效），现在直接 res.axd?icon=Reload 就可以了（土豆丝）。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; +修正TabStrip以及Window的内容高度异常的问题：AutoWidth和AutoHeight默认为false，ExtAspNet不会默认渲染这个值，除非手工指定。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -这是extjs3.4引入的特性，如果组件的autoHeight为true，则浏览器会根据组件的内容管理其高度，手工调用setHeight没有效果。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -典型的案例，如果设置Window的AutoHeight为true，在不能最大化和改变窗体的大小。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -修正首页打开后不能默认选中左侧第三级树节点的问题。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; +增加FileUpload控件，并增加示例页面form/fileupload.aspx。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -修正使用文件上传控件后，返回的结果中出现HTML编码问题。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; +Grid控件增强。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -为 WindowField 和 LinkButtonField 字段增加 Icon 和 IconUrl 两个属性（efrigate43）。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -为全部表格列字段增加 ToolTip 属性，同时原来的 DataTooltipField 改名为 DataToolTipField。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -增加示例 grid/grid_centercolumn.aspx，使某列居中显示。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -为 TemplateField 增加 RenderAsRowExpander 属性，用来显示行扩展。增加示例 /grid/grid_rowexpander.aspx。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; +为所有控件增加 Ajax 属性 CssClass 和 CssStyle（goansonpan）。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -增加示例 other/cssstyle.aspx。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -示例工程，在切换示例时同时修改地址栏，以便页面刷新后也能回到最后一次浏览的页面。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -增加 Table、HBox 和 VBox三种布局，并对所有布局示例进行重构。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; +单选框控件增强。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -为 RadioButtonList 增加 ColumnVertical、Required 和 RequiredMessage 三个属性。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -增加 CheckBoxList 控件，并增加示例 /form/checkboxlist.aspx。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -增加示例 /aspnet/aspnet_literal.aspx。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; +将Button和MenuItem的Menus属性改为Menu属性，毕竟一个按钮只可能有一个菜单，这样也简化了ASPX中的标签。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -同时更新/button/button_menu.aspx和/other/menu_dynamic.aspx两个示例。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;《ExtAspNet秘密花园》系列文章&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在未来的3个月，我会在博客园逐步发布《ExtAspNet秘密花园》系列文章，预计在30篇以上，敬请关注我的博客。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;ExtAspNet秘密花园（一） &amp;mdash; 为什么选择ExtAspNet？&lt;/li&gt;&#xD;
&lt;li&gt;ExtAspNet秘密花园（二） &amp;mdash; 一切从头开始&lt;/li&gt;&#xD;
&lt;li&gt;ExtAspNet秘密花园（三） &amp;mdash; 深入Web.config&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://www.cnblogs.com/sanshi/archive/2012/02/04/2337814.html"&gt;ExtAspNet秘密花园（四） &amp;mdash; 每个页面都需要一个PageManager&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://www.cnblogs.com/sanshi/archive/2012/02/05/2338840.html"&gt;ExtAspNet秘密花园（五） &amp;mdash; 功能强大的按钮&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;ExtAspNet秘密花园（六） &amp;mdash; 常用的表单控件&lt;/li&gt;&#xD;
&lt;li&gt;ExtAspNet秘密花园（七） &amp;mdash; 姗姗来迟的上传控件&lt;/li&gt;&#xD;
&lt;li&gt;ExtAspNet秘密花园（八） &amp;mdash; 下拉列表控件&lt;/li&gt;&#xD;
&lt;li&gt;ExtAspNet秘密花园（九） &amp;mdash; 表单控件的客户端验证&lt;/li&gt;&#xD;
&lt;li&gt;&amp;hellip;&amp;hellip;&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;ExtAspNet交流社区&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;示例：&lt;a href="http://extasp.net/"&gt;http://extasp.net/&lt;/a&gt; &lt;br /&gt;论坛：&lt;a href="http://bbs.extasp.net/"&gt;http://bbs.extasp.net/&lt;/a&gt; &lt;br /&gt;开源：&lt;a href="http://extaspnet.codeplex.com/"&gt;http://extaspnet.codeplex.com/&lt;/a&gt; &lt;br /&gt;博客：&lt;a href="http://sanshi.cnblogs.com/" target="_blank"&gt;http://sanshi.cnblogs.com/&lt;/a&gt;&lt;br /&gt;小组：&lt;a href="http://home.cnblogs.com/group/extaspnet/"&gt;http://home.cnblogs.com/group/extaspnet/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;QQ交流群:&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;ExtAspNet技术交流群1：158028499(已满)，100人，创始人：sanshi&amp;nbsp;&amp;nbsp;&lt;/li&gt;&#xD;
&lt;li&gt;ExtAspNet技术交流群2：111870015(已满)，200人，创始人：爱淘课&lt;/li&gt;&#xD;
&lt;li&gt;ExtAspNet技术交流群3：102333298(已满)，200人，创始人：爱淘课&lt;/li&gt;&#xD;
&lt;li&gt;ExtAspNet技术交流群4：123899180(已满)，200人，创始人：爱淘课&amp;nbsp;&amp;nbsp;&lt;/li&gt;&#xD;
&lt;li&gt;ExtAspNet技术交流群5：105052447(已满)，500人，创始人：╰☆阿波◆罗&lt;/li&gt;&#xD;
&lt;li&gt;ExtAspNet技术交流群6：124527804(已满)，200人，创始人：爱淘课&lt;/li&gt;&#xD;
&lt;li&gt;ExtAspNet技术交流群7：161370746(已满)，200人，创始人：真心小騙子&lt;/li&gt;&#xD;
&lt;li&gt;ExtAspNet技术交流群8：166649916(未满)，200人，创始人：AT&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;也欢迎广大热心网友为ExtAspNet贡献QQ技术交流群。&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果你喜欢ExtAspNet，请推荐这篇文件或者关注博主，以便更多的网友了解和熟悉ExtAspNet，谢谢！&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;==========================================================&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;p&gt;鉴于广大网友的强烈要求，ExtAspNet的官方示例网站和官方论坛速度归来：&lt;/p&gt;&#xD;
&lt;p&gt;官方示例：&lt;a href="http://extasp.net/"&gt;http://extasp.net/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;官方论坛：&lt;a href="http://bbs.extasp.net/"&gt;http://bbs.extasp.net/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这次将服务器移到了国内，所以速度大大提升，我这边的访问速度基本维持在4s之内，不知道你们那边的怎么样？&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;虽然ExtAspNet现在已经有8个QQ群了（总人数在2000人左右），并且每天都有很多用户涌向这些群，但是QQ群有个致命弱点，那就是每个 QQ群都有人数限制，导致信息过于分散，很多问题在各个QQ群被重复提及，因此一个无人数限制的论坛也是广大网友一直以来的心愿。&lt;/p&gt;&#xD;
&lt;p&gt;之前虽然也有官方论坛，但是由于服务器在国外，导致速度极慢经常抽风，也形同虚设。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这次，我们特意将服务器移回国内，速度也极大地提升，希望这次的官方论坛能够成为广大ExtAspNet爱好者交流学习的乐园。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;再次，我们诚挚地邀请您加入ExtAspNet官方论坛，为ExtAspNet的发展壮大贡献自己的一份力量：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://bbs.extasp.net/"&gt;http://bbs.extasp.net/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;注：为了防止水文泛滥，官方论坛只能通过QQ账号登陆，这样也免除了大家重新注册账号的麻烦。&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/sanshi/aggbug/2330677.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sanshi/archive/2012/01/28/2330677.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/sanshi/archive/2012/01/28/2330591.html</id><title type="text">ExtAspNet更新计划</title><summary type="text">【2012-1-28更新】计划在近期发布V3.0。不再维护extasp.net和bbs.extasp.net网站，国外主机速度太不给力，国内的主机价格太给力。将在博客园发布《ExtAspNet秘密花园》系列文章，预计会有30多篇文章，三个月内连载完毕。V3.0的主要更新包括：全中文的示例站点，增加上传控件、复选框列表、完善的布局管理，以及30多个的BUG修正或功能增强。希望热心网友继续贡献QQ交流群，目前有8个ExtAspNet技术交流群，只有一个未满。</summary><published>2012-01-28T08:32:00Z</published><updated>2012-01-28T08:32:00Z</updated><author><name>三生石上</name><uri>http://www.cnblogs.com/sanshi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sanshi/archive/2012/01/28/2330591.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sanshi/archive/2012/01/28/2330591.html"/><content type="html">&lt;p&gt;【2012-1-28更新】&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;计划在近期发布V3.0。&lt;/li&gt;&#xD;
&lt;li&gt;不再维护extasp.net和bbs.extasp.net网站，国外主机速度太不给力，国内的主机价格太给力。&lt;/li&gt;&#xD;
&lt;li&gt;将在博客园发布《ExtAspNet秘密花园》系列文章，预计会有30多篇文章，三个月内连载完毕。&lt;/li&gt;&#xD;
&lt;li&gt;V3.0的主要更新包括：全中文的示例站点，增加上传控件、复选框列表、完善的布局管理，以及30多个的BUG修正或功能增强。&lt;/li&gt;&#xD;
&lt;li&gt;希望热心网友继续贡献QQ交流群，目前有8个ExtAspNet技术交流群，只有一个未满。&lt;/li&gt;&#xD;
&lt;/ul&gt;&lt;img src="http://www.cnblogs.com/sanshi/aggbug/2330591.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sanshi/archive/2012/01/28/2330591.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/sanshi/archive/2011/08/02/2125642.html</id><title type="text">[原创][开源]跨浏览器的JavaScript性能检测工具 - 至于你信不信，我反正信了</title><summary type="text">提出问题如果识别出页面中JavaScript函数的性能问题，在不同浏览器下有不同的测试工具：Firefox下使用Firebug的Profile工具Chrome下使用内置的Profile工具IE9下也有Profile工具虽然大家的功能一个比一个炫，但是始终解决不了两个问题：如何只检测指定命名空间下的函数性能，否则会产生大堆的无用数据。不能跨浏览器使用，没有统一的参照物。同时不同工具之间还有一定差异的背景噪音影响。还有一点就是仍然占据主流的IE7和IE8没有内置的JavaScript性能检测工具。寻求解决方案首先在网上找到的一篇文章是John Resig在2008年6月发表的一篇文章，是够古老的了</summary><published>2011-08-02T15:58:00Z</published><updated>2011-08-02T15:58:00Z</updated><author><name>三生石上</name><uri>http://www.cnblogs.com/sanshi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sanshi/archive/2011/08/02/2125642.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sanshi/archive/2011/08/02/2125642.html"/><content type="html">&lt;div &gt;&#xD;
&lt;p&gt;&lt;strong&gt;提出问题&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果识别出页面中JavaScript函数的性能问题，在不同浏览器下有不同的测试工具：&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&#xD;
&lt;p&gt;Firefox下使用Firebug的Profile工具&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://sanshi.me/articles/jprofile/images/profile_firefox.jpg" alt="Firefox Profile Tool" title="" /&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;&#xD;
&lt;p&gt;Chrome下使用内置的Profile工具&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://sanshi.me/articles/jprofile/images/profile_chrome.jpg" alt="Chrome Profile Tool" title="" /&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;&#xD;
&lt;p&gt;IE9下也有Profile工具&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://sanshi.me/articles/jprofile/images/profile_ie9.jpg" alt="IE9 Profile Tool" title="" /&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;虽然大家的功能一个比一个炫，但是始终解决不了两个问题：&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;如何只检测指定命名空间下的函数性能，否则会产生大堆的无用数据。&lt;/li&gt;&#xD;
&lt;li&gt;不能跨浏览器使用，没有统一的参照物。同时不同工具之间还有一定差异的背景噪音影响。&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;还有一点就是仍然占据主流的IE7和IE8没有内置的JavaScript性能检测工具。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;寻求解决方案&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;首先在网上找到的一篇文章是John Resig在2008年6月发表的&lt;a href="http://ejohn.org/blog/deep-profiling-jquery-apps/"&gt;一篇文章&lt;/a&gt;，是够古老的了，不过还是非常有借鉴意义，它的输入结果如下所示：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://sanshi.me/articles/jprofile/images/john_resig_get_profile.png" alt="John Resig getProfile" title="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们来看一下它的核心代码，这段代码用来处理jQuery.fn下的所有函数：&lt;/p&gt;&#xD;
&lt;pre &gt;&lt;span &gt;for&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;(&lt;/span&gt;&lt;span &gt;var&lt;/span&gt;&lt;span &gt; method &lt;/span&gt;&lt;span &gt;in&lt;/span&gt;&lt;span &gt; jQuery&lt;/span&gt;&lt;span &gt;.&lt;/span&gt;&lt;span &gt;fn&lt;/span&gt;&lt;span &gt;)(&lt;/span&gt;&lt;span &gt;function&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;(&lt;/span&gt;&lt;span &gt;method&lt;/span&gt;&lt;span &gt;)&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;{&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span &gt;if&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;(&lt;/span&gt;&lt;span &gt;method &lt;/span&gt;&lt;span &gt;==&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;"init"&lt;/span&gt;&lt;span &gt;)&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;return&lt;/span&gt;&lt;span &gt;;&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span &gt;var&lt;/span&gt;&lt;span &gt; old &lt;/span&gt;&lt;span &gt;=&lt;/span&gt;&lt;span &gt; jQuery&lt;/span&gt;&lt;span &gt;.&lt;/span&gt;&lt;span &gt;fn&lt;/span&gt;&lt;span &gt;[&lt;/span&gt;&lt;span &gt;method&lt;/span&gt;&lt;span &gt;];&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; jQuery&lt;/span&gt;&lt;span &gt;.&lt;/span&gt;&lt;span &gt;fn&lt;/span&gt;&lt;span &gt;[&lt;/span&gt;&lt;span &gt;method&lt;/span&gt;&lt;span &gt;]&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;=&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;function&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;()&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;{&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span &gt;if&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;(!&lt;/span&gt;&lt;span &gt;internal&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span &gt; curEvent&lt;/span&gt;&lt;span &gt;)&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;{&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span &gt;internal&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;=&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;true&lt;/span&gt;&lt;span &gt;;&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span &gt;var&lt;/span&gt;&lt;span &gt; m &lt;/span&gt;&lt;span &gt;=&lt;/span&gt;&lt;span &gt; curEvent&lt;/span&gt;&lt;span &gt;.&lt;/span&gt;&lt;span &gt;methods&lt;/span&gt;&lt;span &gt;[&lt;/span&gt;&lt;span &gt;curEvent&lt;/span&gt;&lt;span &gt;.&lt;/span&gt;&lt;span &gt;methods&lt;/span&gt;&lt;span &gt;.&lt;/span&gt;&lt;span &gt;length&lt;/span&gt;&lt;span &gt;]&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;=&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;{&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; name&lt;/span&gt;&lt;span &gt;:&lt;/span&gt;&lt;span &gt; method&lt;/span&gt;&lt;span &gt;,&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; inLength&lt;/span&gt;&lt;span &gt;:&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;this&lt;/span&gt;&lt;span &gt;.&lt;/span&gt;&lt;span &gt;length&lt;/span&gt;&lt;span &gt;,&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; args&lt;/span&gt;&lt;span &gt;:&lt;/span&gt;&lt;span &gt; formatArgs&lt;/span&gt;&lt;span &gt;(&lt;/span&gt;&lt;span &gt;arguments&lt;/span&gt;&lt;span &gt;)&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span &gt;};&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span &gt;var&lt;/span&gt;&lt;span &gt; start &lt;/span&gt;&lt;span &gt;=&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;(&lt;/span&gt;&lt;span &gt;new&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;Date&lt;/span&gt;&lt;span &gt;).&lt;/span&gt;&lt;span &gt;getTime&lt;/span&gt;&lt;span &gt;();&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span &gt;var&lt;/span&gt;&lt;span &gt; ret &lt;/span&gt;&lt;span &gt;=&lt;/span&gt;&lt;span &gt; old&lt;/span&gt;&lt;span &gt;.&lt;/span&gt;&lt;span &gt;apply&lt;/span&gt;&lt;span &gt;(&lt;/span&gt;&lt;span &gt;this&lt;/span&gt;&lt;span &gt;,&lt;/span&gt;&lt;span &gt; arguments&lt;/span&gt;&lt;span &gt;);&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; m&lt;/span&gt;&lt;span &gt;.&lt;/span&gt;&lt;span &gt;duration &lt;/span&gt;&lt;span &gt;=&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;(&lt;/span&gt;&lt;span &gt;new&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;Date&lt;/span&gt;&lt;span &gt;).&lt;/span&gt;&lt;span &gt;getTime&lt;/span&gt;&lt;span &gt;()&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;-&lt;/span&gt;&lt;span &gt; start&lt;/span&gt;&lt;span &gt;;&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span &gt;if&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;(&lt;/span&gt;&lt;span &gt;curEvent&lt;/span&gt;&lt;span &gt;.&lt;/span&gt;&lt;span &gt;event&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;==&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;"inline"&lt;/span&gt;&lt;span &gt;)&lt;/span&gt;&lt;span &gt; curEvent&lt;/span&gt;&lt;span &gt;.&lt;/span&gt;&lt;span &gt;duration &lt;/span&gt;&lt;span &gt;+=&lt;/span&gt;&lt;span &gt; m&lt;/span&gt;&lt;span &gt;.&lt;/span&gt;&lt;span &gt;duration&lt;/span&gt;&lt;span &gt;;&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span &gt;if&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;(&lt;/span&gt;&lt;span &gt;ret &lt;/span&gt;&lt;span &gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span &gt; ret&lt;/span&gt;&lt;span &gt;.&lt;/span&gt;&lt;span &gt;jquery&lt;/span&gt;&lt;span &gt;)&lt;/span&gt;&lt;span &gt; m&lt;/span&gt;&lt;span &gt;.&lt;/span&gt;&lt;span &gt;outLength &lt;/span&gt;&lt;span &gt;=&lt;/span&gt;&lt;span &gt; ret&lt;/span&gt;&lt;span &gt;.&lt;/span&gt;&lt;span &gt;length&lt;/span&gt;&lt;span &gt;;&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span &gt;internal&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;=&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;false&lt;/span&gt;&lt;span &gt;;&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span &gt;return&lt;/span&gt;&lt;span &gt; ret&lt;/span&gt;&lt;span &gt;;&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span &gt;}&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;else&lt;/span&gt;&lt;span &gt; &lt;/span&gt;&lt;span &gt;{&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span &gt;return&lt;/span&gt;&lt;span &gt; old&lt;/span&gt;&lt;span &gt;.&lt;/span&gt;&lt;span &gt;apply&lt;/span&gt;&lt;span &gt;(&lt;/span&gt;&lt;span &gt;this&lt;/span&gt;&lt;span &gt;,&lt;/span&gt;&lt;span &gt; arguments&lt;/span&gt;&lt;span &gt;);&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span &gt;}&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span &gt;};&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;span &gt;})(&lt;/span&gt;&lt;span &gt;method&lt;/span&gt;&lt;span &gt;);&lt;/span&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;从这段代码中，我们看到如下一些步骤：&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;将需要处理的函数备份起来：var old = jQuery.fn[method];&lt;/li&gt;&#xD;
&lt;li&gt;使用一个新的函数覆盖此函数：jQuery.fn[method] = function () {&lt;/li&gt;&#xD;
&lt;li&gt;&#xD;
&lt;p&gt;在新函数内，调用备份的原始函数，并在调用前后添加计时代码，以确定本次调用这个原始函数的时间：&lt;/p&gt;&#xD;
&lt;p&gt;var start = (new Date).getTime();&#xD;
var ret = old.apply(this, arguments);&#xD;
m.duration = (new Date).getTime() - start;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;有了这个核心概念，我们可以写个自己的JavaScript的Profile功能，而不仅仅是局限于检测jQuery代码，我们要让用户自己指定要检测的JavaScript命名空间！&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;我的开源实现&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我的开源实现：&lt;a href="http://code.google.com/p/jprofile/"&gt;http://code.google.com/p/jprofile/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;它的最大特点：&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;可以指定测试的命名空间&lt;/li&gt;&#xD;
&lt;li&gt;可以跨浏览器使用&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;使用起来非常方便，只需要如下几个步骤：&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;&#xD;
&lt;p&gt;在页面的最后引入jprofile.js。（&lt;em&gt;这也是安装jprofile开源解决方案的全部步骤！&lt;/em&gt;）&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://sanshi.me/articles/jprofile/images/enable_jprofile_1.png" alt="Enable jProfile 1" width="800" /&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;&#xD;
&lt;p&gt;打开页面，可以看到右上角的那个Enable jProfile按钮：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://sanshi.me/articles/jprofile/images/enable_jprofile_2.png" alt="Enable jProfile 2" title="" /&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;&#xD;
&lt;p&gt;点击那个按钮，会弹出一个对话框，输入你要检测的命名空间，比如"jQuery"：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://sanshi.me/articles/jprofile/images/enable_jprofile_3.png" alt="Enable jProfile 3" width="800" /&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;&#xD;
&lt;p&gt;点击确定，页面会自动刷新，并显示jProfile工具条。点击Display按钮显示结果：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://sanshi.me/articles/jprofile/images/enable_jprofile_4.png" alt="Enable jProfile 3" title="" /&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;strong&gt;跨浏览器测试jQueryUI&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;下面就让我们使用jProfile测试一下jQueryUI首页JavaScript的性能，以下是测试数据。&#xD;
你可以自己试一下，&lt;a href="http://sanshi.me/articles/jprofile/jqueryui/index.html"&gt;在线示例地址&lt;/a&gt;。&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&#xD;
&lt;p&gt;Firefox&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://sanshi.me/articles/jprofile/images/jqueryui_firefox.png" alt="jQueryUI with jProfile Firefox" width="800" /&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;&#xD;
&lt;p&gt;IE7&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://sanshi.me/articles/jprofile/images/jqueryui_ie7.png" alt="jQueryUI with jProfile Firefox" width="800" /&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;&#xD;
&lt;p&gt;IE8&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://sanshi.me/articles/jprofile/images/jqueryui_ie8.png" alt="jQueryUI with jProfile Firefox" width="800" /&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这是个跨浏览器JavaScript性能检测的奇迹，至于你信不信，我反正信了。&lt;/p&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/sanshi/aggbug/2125642.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sanshi/archive/2011/08/02/2125642.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/sanshi/archive/2011/06/17/2084020.html</id><title type="text">[翻译]OAuth入门指南 - 2. 协议工作流</title><summary type="text">作者：Eran Hammer-Lahav译者：三生石上原文：Beginner&amp;#39;s Guide to OAuth – Part II : Protocol Workflow声明：此中文翻译由三生石上独立完成，博客园首发，转载请注明出处。通过实际的案例学习OAuth有助于加深理解。规范文档的附录A中包含了一个类似的示例，只不过它聚焦HTTP请求响应的结构。这里对这个典型的OAuth会话应用重新进行演示，并从用户、消费者和服务提供商的角度看待问题。文中提到的网站和人员都是虚构的。不过提到的苏格兰人名是真的。我们的故事是这样开始的…Jane刚结束她的苏格兰之旅。她花了2周的时间在Islay岛上</summary><published>2011-06-17T15:33:00Z</published><updated>2011-06-17T15:33:00Z</updated><author><name>三生石上</name><uri>http://www.cnblogs.com/sanshi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sanshi/archive/2011/06/17/2084020.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sanshi/archive/2011/06/17/2084020.html"/><content type="html">&lt;div  style="layout-grid: 15.6pt;"&gt;&#xD;
&lt;div style="border-top: solid #D9D9D9 1.0pt; border-left: none; border-bottom: solid #D9D9D9 1.0pt; border-right: none; padding: 4.0pt 0cm 4.0pt 0cm; margin-left: 21.0pt; margin-right: 0cm;"&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm;"&gt;&lt;span style="font-family: 幼圆;"&gt;作者：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://hueniverse.com/"&gt;&lt;span style="text-decoration: underline;"&gt;Eran Hammer-Lahav&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm;"&gt;&lt;span style="font-family: 幼圆;"&gt;译者：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://sanshi.me/"&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span lang="EN-US" style="font-family: 幼圆;"&gt;&lt;span lang="EN-US"&gt;三生石上&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm;"&gt;&lt;span style="font-family: 幼圆;"&gt;原文：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://hueniverse.com/2007/10/beginners-guide-to-oauth-part-ii-protocol-workflow/"&gt;&lt;span style="text-decoration: underline;"&gt;Beginner's Guide to OAuth &amp;ndash; Part II : Protocol Workflow&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm;"&gt;&lt;span style="font-family: 幼圆;"&gt;声明：此中文翻译由&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://sanshi.me/"&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span lang="EN-US" style="font-family: 幼圆;"&gt;&lt;span lang="EN-US"&gt;三生石上&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;独立完成，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://www.cnblogs.com/sanshi"&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span lang="EN-US" style="font-family: 幼圆;"&gt;&lt;span lang="EN-US"&gt;博客园&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;首发，转载请注明出处。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span style="font-family: 宋体;"&gt;通过实际的案例学习&lt;/span&gt;&lt;span lang="EN-US"&gt;OAuth&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;有助于加深理解。规范文档的附录&lt;/span&gt;&lt;span lang="EN-US"&gt;A&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;中包含了一个类似的示例，只不过它聚焦&lt;/span&gt;&lt;span lang="EN-US"&gt;HTTP&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;请求响应的结构。这里对这个典型的&lt;/span&gt;&lt;span lang="EN-US"&gt;OAuth&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;会话应用重新进行演示，并从用户、消费者和服务提供商的角度看待问题。文中提到的网站和人员都是虚构的。不过提到的苏格兰人名是真的。我们的故事是这样开始的&lt;/span&gt;&lt;span lang="EN-US"&gt;&amp;hellip;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;img height="213" width="278" src="http://sanshi.me/articles/oauth/beginner_guide_to_oauth_part_2_protocol_workflow.files/image001.jpg" border="0" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="border-top: solid #D9D9D9 1.0pt; border-left: none; border-bottom: solid #D9D9D9 1.0pt; border-right: none; padding: 4.0pt 0cm 4.0pt 0cm; margin-left: 21.0pt; margin-right: 0cm;"&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm;"&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;刚结束她的苏格兰之旅。她花了&lt;/span&gt;&lt;span lang="EN-US"&gt;2&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;周的时间在&lt;/span&gt;&lt;span lang="EN-US"&gt;Islay&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;岛上欣赏美景。当她回到家里，&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;想和朋友们分享一些她在旅行中的照片。&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;使用&lt;/span&gt;&lt;span lang="EN-US"&gt;Faji&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;，一个照片分享网站，来分享旅途中的照片。她登录&lt;/span&gt;&lt;span lang="EN-US"&gt;faji.com&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;的帐号，上传了&lt;/span&gt;&lt;span lang="EN-US"&gt;2&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;张照片并把它们标记为私有的。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span style="font-family: 宋体;"&gt;在&lt;/span&gt;&lt;span lang="EN-US"&gt;OAuth&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的术语中，&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;是一个用户，而&lt;/span&gt;&lt;span lang="EN-US"&gt;Faji&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;是服务提供商。&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;上传的&lt;/span&gt;&lt;span lang="EN-US"&gt;2&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;张照片是受保护的资源。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;img height="382" width="484" src="http://sanshi.me/articles/oauth/beginner_guide_to_oauth_part_2_protocol_workflow.files/image002.jpg" border="0" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="border-top: solid #D9D9D9 1.0pt; border-left: none; border-bottom: solid #D9D9D9 1.0pt; border-right: none; padding: 4.0pt 0cm 4.0pt 0cm; margin-left: 21.0pt; margin-right: 0cm;"&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm;"&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;和一些在线的朋友分享了她的照片，之后她还想把照片拿给她的祖母看。她不想和其他人分享她的苏格兰之旅。但是祖母不会上网，因此&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;决定打印一些照片并把这些照片邮寄给她的祖母。&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;选择了&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;（一个界面友好的在线照片打印服务商）来打印这些照片。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span style="font-family: 宋体;"&gt;在&lt;/span&gt;&lt;span lang="EN-US"&gt;OAuth&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的术语中，&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;是一个消费者。由于&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;把这些照片设为私有资源，&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;在打印前必须通过&lt;/span&gt;&lt;span lang="EN-US"&gt;OAuth&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;来获取对这些照片的访问权限。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="border-top: solid #D9D9D9 1.0pt; border-left: none; border-bottom: solid #D9D9D9 1.0pt; border-right: none; padding: 4.0pt 0cm 4.0pt 0cm; margin-left: 21.0pt; margin-right: 0cm;"&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm;"&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;访问&lt;/span&gt;&lt;span lang="EN-US"&gt;beppa.com&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;网站，开始下订单。&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;支持从很多照片分享网站导入照片，包括&lt;/span&gt;&lt;span lang="EN-US"&gt;Faji&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;。&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;选择照片来源并点击继续按钮。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;img height="382" width="484" src="http://sanshi.me/articles/oauth/beginner_guide_to_oauth_part_2_protocol_workflow.files/image003.jpg" border="0" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span style="font-family: 宋体;"&gt;当&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;添加对&lt;/span&gt;&lt;span lang="EN-US"&gt;Faji&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的照片导入支持时，&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;开发人员（在&lt;/span&gt;&lt;span lang="EN-US"&gt;OAuth&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;中称为&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;inherit&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Consumer Developer&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;）从&lt;/span&gt;&lt;span lang="EN-US"&gt;Faji&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;获得了一个&lt;/span&gt;&lt;span lang="EN-US"&gt;Consumer Key&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;和一个&lt;/span&gt;&lt;span lang="EN-US"&gt;Consumer Secret&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，这些信息用来配合&lt;/span&gt;&lt;span lang="EN-US"&gt;Faji&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的&lt;/span&gt;&lt;span lang="EN-US"&gt;OAuth API&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;使用。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;点击继续按钮的时候，&lt;/span&gt; &lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;Faji&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;之间在后台发生了一件重要的事情。&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;向&lt;/span&gt;&lt;span lang="EN-US"&gt;Faji&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;请求一个&lt;/span&gt;&lt;span lang="EN-US"&gt;Request Token&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;。此时，&lt;/span&gt;&lt;span lang="EN-US"&gt;Request Token&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;是不含用户信息的，之后用户可以授权&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;使用此信息访问她的私有照片。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;img height="271" width="350" src="http://sanshi.me/articles/oauth/beginner_guide_to_oauth_part_2_protocol_workflow.files/image004.jpg" border="0" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="border-top: solid #D9D9D9 1.0pt; border-left: none; border-bottom: solid #D9D9D9 1.0pt; border-right: none; padding: 4.0pt 0cm 4.0pt 0cm; margin-left: 21.0pt; margin-right: 0cm;"&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm;"&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;点击继续按钮，然后等待她的屏幕发生变化。等待页面加载的过程中，她悠闲地喝了一小口&lt;/span&gt;&lt;span lang="EN-US"&gt;Black Bowmore&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;（一种威士忌）。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span style="font-family: 宋体;"&gt;当&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;接收到&lt;/span&gt;&lt;span lang="EN-US"&gt;Request Token&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，它把&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;重定向到&lt;/span&gt;&lt;span lang="EN-US"&gt;Faji&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的&lt;/span&gt;&lt;span lang="EN-US"&gt;OAuth&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;用户认证页面，请求中包含了&lt;/span&gt;&lt;span lang="EN-US"&gt;Request Token&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;信息以及在获得用户授权&lt;/span&gt;&lt;span lang="EN-US"&gt;Faji&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;之后返回的页面地址&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://beppa.com/order"&gt;&lt;span style="text-decoration: underline;"&gt;http://beppa.com/order&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;已经被重定向到&lt;/span&gt;&lt;span lang="EN-US"&gt;Faji&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;页面，并请求登录网站。&lt;/span&gt;&lt;span lang="EN-US"&gt;OAuth&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;要求服务提供商首先认证用户，然后请求他们将资源授权给消费者。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="border-top: solid #D9D9D9 1.0pt; border-left: none; border-bottom: solid #D9D9D9 1.0pt; border-right: none; padding: 4.0pt 0cm 4.0pt 0cm; margin-left: 21.0pt; margin-right: 0cm;"&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm;"&gt;&lt;span style="font-family: 幼圆;"&gt;通过查看地址栏的&lt;/span&gt;&lt;span lang="EN-US"&gt;URL&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;注意到她被带到了&lt;/span&gt;&lt;span lang="EN-US"&gt;Faji&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;页面，她输入了用户名和密码登录&lt;/span&gt;&lt;span lang="EN-US"&gt;Faji&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;网站。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;img height="382" width="484" src="http://sanshi.me/articles/oauth/beginner_guide_to_oauth_part_2_protocol_workflow.files/image005.jpg" border="0" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span lang="EN-US"&gt;OAuth&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;允许&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;不公开用户名和密码，无需和&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;或者其他任何网站分享用户名和密码。&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;也没有在&lt;/span&gt;&lt;span lang="EN-US"&gt;beppa.com&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;输入登录凭证。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span style="font-family: 宋体;"&gt;成功登录&lt;/span&gt;&lt;span lang="EN-US"&gt;Faji&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;后，&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;被询问是否授权给消费者&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;。&lt;/span&gt;&lt;span lang="EN-US"&gt;Faji&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;会提示&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;是谁在请求访问权限（本例中是&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;）以及需要哪些访问权限。&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;可以批准或者拒绝这个请求。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="border-top: solid #D9D9D9 1.0pt; border-left: none; border-bottom: solid #D9D9D9 1.0pt; border-right: none; padding: 4.0pt 0cm 4.0pt 0cm; margin-left: 21.0pt; margin-right: 0cm;"&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm;"&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;确认&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;只有有限的访问权限。她不想&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;修改她的照片或者对它们进行其他操作。她也注意到这是一次性的授权，并且只在接下来的&lt;/span&gt;&lt;span lang="EN-US"&gt;1&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;个小时内有效，这个时间足够&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;获取她的照片了。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;img height="382" width="484" src="http://sanshi.me/articles/oauth/beginner_guide_to_oauth_part_2_protocol_workflow.files/image006.jpg" border="0" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span style="font-family: 宋体;"&gt;一旦&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;批准了这个请求，&lt;/span&gt;&lt;span lang="EN-US"&gt;Faji&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;就标识这个&lt;/span&gt;&lt;span lang="EN-US"&gt;Request Token&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;已经被&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;授权。&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的浏览器会被重定向到&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的页面&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://beppa.com/order"&gt;&lt;span style="text-decoration: underline;"&gt;http://beppa.com/order&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，此页面地址之前和&lt;/span&gt;&lt;span lang="EN-US"&gt;Request Token&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;一道作为请求信息传递。这就告诉&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;可以继续获取&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的照片了。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="border-top: solid #D9D9D9 1.0pt; border-left: none; border-bottom: solid #D9D9D9 1.0pt; border-right: none; padding: 4.0pt 0cm 4.0pt 0cm; margin-left: 21.0pt; margin-right: 0cm;"&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm;"&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;等待&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;显示从&lt;/span&gt;&lt;span lang="EN-US"&gt;Faji&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;帐号中获取的照片。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;img height="382" width="484" src="http://sanshi.me/articles/oauth/beginner_guide_to_oauth_part_2_protocol_workflow.files/image007.jpg" border="0" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span style="font-family: 宋体;"&gt;在&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;等待的时候，&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;使用认证过的&lt;/span&gt;&lt;span lang="EN-US"&gt;Request Token&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;来换取&lt;/span&gt;&lt;span lang="EN-US"&gt;Access Token&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;。&lt;/span&gt;&lt;span lang="EN-US"&gt;Request Token&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;仅仅用来获取用户的批准，而&lt;/span&gt;&lt;span lang="EN-US"&gt;Access Token&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;可以用来访问受保护的资源（在这个例子中是&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的照片）。所以第一个请求，&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;使用&lt;/span&gt;&lt;span lang="EN-US"&gt;Request Token&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;换取了&lt;/span&gt;&lt;span lang="EN-US"&gt;Access Token&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，第二个请求（可能是多次请求，一个用来获取照片列表，其他的用来获取每张照片的详细信息）用来获取照片。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;img height="242" width="292" src="http://sanshi.me/articles/oauth/beginner_guide_to_oauth_part_2_protocol_workflow.files/image008.gif" border="0" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span style="font-family: 宋体;"&gt;当&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;完成的时候，&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的浏览器会刷新以完成订单。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;成功的获取了&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的照片。照片以缩略图的形式呈现出来，供&lt;/span&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;挑选出来打印。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="border-top: solid #D9D9D9 1.0pt; border-left: none; border-bottom: solid #D9D9D9 1.0pt; border-right: none; padding: 4.0pt 0cm 4.0pt 0cm; margin-left: 21.0pt; margin-right: 0cm;"&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm;"&gt;&lt;span lang="EN-US"&gt;Jane&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;对于&lt;/span&gt;&lt;span lang="EN-US"&gt;Beppa&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;不需要她的用户名密码就能获取她的照片的行为印象深刻。她很喜欢这一切，并高兴地完成了打印照片的订单。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;img height="382" width="484" src="http://sanshi.me/articles/oauth/beginner_guide_to_oauth_part_2_protocol_workflow.files/image009.jpg" border="0" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span lang="EN-US"&gt;====&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-top: 7.8pt; margin-right: 0cm; margin-bottom: 7.8pt; margin-left: 0cm; text-indent: 21.0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://sanshi.me/articles/oauth/beginner_guide_to_oauth_part_2_protocol_workflow.htm"&gt;HTML版本&lt;/a&gt;&amp;nbsp; &lt;a href="http://sanshi.me/articles/oauth/beginner_guide_to_oauth_part_2_protocol_workflow.pdf"&gt;PDF版本&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/sanshi/aggbug/2084020.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sanshi/archive/2011/06/17/2084020.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
