﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-Felix的技术专栏</title><link>http://www.cnblogs.com/Dragonpro/</link><description>面对自己、寻找真我……Dragonpro、Winter</description><language>zh-cn</language><lastBuildDate>Wed, 20 Aug 2008 02:59:08 GMT</lastBuildDate><pubDate>Wed, 20 Aug 2008 02:59:08 GMT</pubDate><ttl>60</ttl><item><title>2008，再会，深圳</title><link>http://www.cnblogs.com/Dragonpro/archive/2008/02/24/1079783.html</link><dc:creator>Felix</dc:creator><author>Felix</author><pubDate>Sun, 24 Feb 2008 13:53:00 GMT</pubDate><guid>http://www.cnblogs.com/Dragonpro/archive/2008/02/24/1079783.html</guid><wfw:comment>http://www.cnblogs.com/Dragonpro/comments/1079783.html</wfw:comment><comments>http://www.cnblogs.com/Dragonpro/archive/2008/02/24/1079783.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/Dragonpro/comments/commentRss/1079783.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Dragonpro/services/trackbacks/1079783.html</trackback:ping><description><![CDATA[<p>2008年2月，我打包好行李，离开这工作了四年的城市，回来的时间，待定。。。</p> <p>我希望这是我的一个阶段、一种状态的结束。</p> <p>在深圳工作的这几年里，从稚嫩的毛头小子，经过战战兢兢的摸爬滚打，到现在不伦不类的自己，我只能说，Change me！</p> <p>一直以追求完美的性格要求自己，现在发现越是追求，越不能称心如意……也许，这个世界本身就不完美，目标性太强会缺少快乐，适可而止，以出世的态度面对人生……</p> <p>朋友不多，不过我相信我真正的朋友都是最铁的，因为我知道……，我爱你们！！</p> <p>深圳是个移民城市，大伙儿都是来自五湖四海，都很务实，这很好，我们这个国度，需要更多这样具有实干的精神的人，这种精神也将陪伴着我继续向前……</p> <p>-- 俺不要这么虚 --</p> <p>简单总结一下：</p> <p>第一年：初生牛犊，努力的干活，感觉比较充实，埋头做事，第一次与女孩子你来我往，oh～～</p> <p>第二年：矛盾的一年，混沌的一年，无奈的一年，认识到制度和管理才是公司的命脉……</p> <p>第三年：换了新工作，工作内容很喜欢，对技术的提高帮助很大，做了不少尝试，并成功，经常自己夸奖自己“你真是太聪明了”，同时熬夜也比较多，经历了一个多月的心理斗真，也许这一次让我知道，命运需要妥协……</p> <p>第四年：矛盾的一年，混沌的一年，无奈的一年，也是一晃而过的一年，我感觉我应该转移重点，更多关注业务，迫切的希望有自己的事业，已经准备就绪，我需要迈出第一步……</p> <p>简单的四年，没有任何值得赞许的经历，没错，这就是平淡庸俗的我，只是我很确信，自己一直在努力！</p> <p>2004年1月，我打包好行李，来到了这个既陌生又向往的城市，一切都是那么待定。。。</p><img src ="http://www.cnblogs.com/Dragonpro/aggbug/1079783.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41792/" target="_blank">[新闻]WordPress和Movable Type影响社交网站的未来</a>]]></description></item><item><title>金蝶软件招聘.NET &amp; WEB2.0高级开发工程师（深圳）</title><link>http://www.cnblogs.com/Dragonpro/archive/2007/11/30/zhaoping.html</link><dc:creator>Felix</dc:creator><author>Felix</author><pubDate>Fri, 30 Nov 2007 07:45:00 GMT</pubDate><guid>http://www.cnblogs.com/Dragonpro/archive/2007/11/30/zhaoping.html</guid><wfw:comment>http://www.cnblogs.com/Dragonpro/comments/978433.html</wfw:comment><comments>http://www.cnblogs.com/Dragonpro/archive/2007/11/30/zhaoping.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cnblogs.com/Dragonpro/comments/commentRss/978433.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Dragonpro/services/trackbacks/978433.html</trackback:ping><description><![CDATA[<p>欢迎对WEB2.0或CS感兴趣的朋友与我联系</p>
<p>主要职责：</p>
<ol>
    <li>维护公司对外和对内社区（<a href="http://community.kingdee.com/" target="_blank">community.kingdee.com</a>）目前金蝶社区已经是业内比较大型的专业社区，具有较高的挑战性。
    <li>开发比较独立和自由，可以认真研究一些比较成熟的技术，特别是<a href="http://www.cnblogs.com/Dragonpro/category/54152.html" target="_blank">CommunityServer</a>,如果您对CommunityServer感兴趣却又时时不得要领，那么这个岗位是一个非常不错的锻炼，我会和您共同探讨这些令人激动的技术。
    <li>开发具有一定的挑战性，不过挑战带来的是快速成长，熟悉这项工作将有助于您对开发模式，和一些实用的技术更灵活的应用，比如Ajax。
    <ol></ol>
        </li>
    </ol>
    <p>公司福利还不错，公司特别重视这个职位，待遇属于业界的中上等吧，所以发展前景还是不错的。</p>
    <p>工作地点：深圳、高新科技园区。</p>
    我们需要对WEB开发认识比较全面的熟手，最好在2年以上的实际代码经验,<br />
    <ul></ul>
        <ol>
            <li>面向对象开发基础好，能较好的理解设计模式
            <li>熟悉Sql数据库开发
            <li>Javascript熟悉
            <li>DIV+CSS熟悉 </li>
        </ol>
        <ul></ul>
            这四项熟悉者甚好，待遇从优，更重要的是您能从现有项目中学到很多先进的开发思想，如果您想快速提升自己的开发思想的话，这依然是一个绝好机会。<br />
            <p>有意者随时和我联系：</p>
            <blockquote>
            <p>联系方式：<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/dragonpro/MyPhotos/gmail.png" twffan="done" />&nbsp; <img alt="" src="http://www.cnblogs.com/images/cnblogs_com/dragonpro/MyPhotos/msn.png" twffan="done" /> QQ(18542637)<br />
            <strong><br />
            <span style="font-size: 24pt; color: red">（已经完成）</span></strong></p>
            </blockquote>
<img src ="http://www.cnblogs.com/Dragonpro/aggbug/978433.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41791/" target="_blank">[新闻]谷歌平台手机获准上市</a>]]></description></item><item><title>从String到enum的互换（string to enum to string）</title><link>http://www.cnblogs.com/Dragonpro/archive/2006/07/02/stringtoenumtostring.html</link><dc:creator>Felix</dc:creator><author>Felix</author><pubDate>Sun, 02 Jul 2006 12:39:00 GMT</pubDate><guid>http://www.cnblogs.com/Dragonpro/archive/2006/07/02/stringtoenumtostring.html</guid><wfw:comment>http://www.cnblogs.com/Dragonpro/comments/440962.html</wfw:comment><comments>http://www.cnblogs.com/Dragonpro/archive/2006/07/02/stringtoenumtostring.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Dragonpro/comments/commentRss/440962.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Dragonpro/services/trackbacks/440962.html</trackback:ping><description><![CDATA[<p>Convert a string to an enumerated (enum) value.</p>
<p>Using the Enum.Parse method, you can easily convert a string value to an enumerated value.&nbsp; Doing this requires the type of the enum and string value.&nbsp; Adding the&nbsp;<em>true</em> argument will cause the case to be ignored.</p>
<p>Using the following enum for this example:</p>
<p><font color=#006400>private enum Aircraft<br>{<br>&nbsp;&nbsp; Beech,<br>&nbsp;&nbsp; Cessna,<br>&nbsp;&nbsp; Piper<br>}</font></p>
<p>You can easily convert the string to an enum value like this:</p>
<div>
<p>&#160;</p>
<p><font color=#006400>Aircraft air = (Aircraft) Enum.Parse(typeof(Aircraft), "Cessna", true); </font></p>
</div>
<p>&#160;</p>
<p>Ideally you should wrap a try-catch around the Enum.Parse statement.<br><br>
<hr width="100%">
<p>&#160;</p>
string s;<br>s = <font color=#006400>air </font>.ToString();<br>s = Enum.GetName(typeof(<font color=#006400>Aircraft</font>), <font color=#006400>air.Beech</font>);<br><br>后者比前者性能高<br><br>
<img src ="http://www.cnblogs.com/Dragonpro/aggbug/440962.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41790/" target="_blank">[新闻]微软自称传媒公司 强调搜索引擎三大趋势</a>]]></description></item><item><title>CommunityServer系列之十一：优秀的URL重写机制</title><link>http://www.cnblogs.com/Dragonpro/archive/2006/06/27/436486.html</link><dc:creator>Felix</dc:creator><author>Felix</author><pubDate>Mon, 26 Jun 2006 16:01:00 GMT</pubDate><guid>http://www.cnblogs.com/Dragonpro/archive/2006/06/27/436486.html</guid><wfw:comment>http://www.cnblogs.com/Dragonpro/comments/436486.html</wfw:comment><comments>http://www.cnblogs.com/Dragonpro/archive/2006/06/27/436486.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cnblogs.com/Dragonpro/comments/commentRss/436486.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Dragonpro/services/trackbacks/436486.html</trackback:ping><description><![CDATA[<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最近激情于对</span><span>CS2</span><span>的改造，疏于本系列的更新，一方面本身文章的受众比较有限，另一方面是自己的业余时间有限，着重于对</span><span>CS</span><span>的改造就必须放慢另外一方面的事情。</span>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 长话短说，简单说一下在</span><span>CS2</span><span>中的</span><span>URL</span><span>重写机制，</span><span>CS2</span><span>中的</span><span>URL</span><span>重写机制或者叫</span><span>URL</span><span>解决放案更贴切，我感觉是非常优秀的，虽然处理上复杂了些，但严格按照好的架构思想出来的应用具有非常好的扩展性。</span></p>
<p><span>不熟悉</span><span>URLRewrite</span><span>的可以参看<a href="http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx?mfr=true">http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx?mfr=true</a></span></p>
<p><span>本文假设您已经基本了解了</span><span>URL</span><span>重写机制的基础上展开的。</span></p>
<p><span>通过</span><span>web.config</span><span>中的</span><span>httpModules</span><span>配置节我们了解到</span><span>CS</span><span>处理</span><span>HttpModules</span><span>的处理程序，在这里是当一个请求建立时最开始的事件，在这里，</span><span>HttpModule</span><span>处理程序不仅处理请求有关的操作还操作</span><span>URLRewrite</span><span>，具体的架构参见下面的</span><span>UML</span><span>图：<br><img height=493 alt="" src="http://www.cnblogs.com/images/cnblogs_com/dragonpro/CommunityServer/UrlReWrite_UML.jpg" width=541 border=0><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从此图了解一个大概即可，现简单描述一下处理过程：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当客户端请求到达IIS后，通过IIS把处理递交给HTTP处理程序（HttpModule），通过在HttpModule中注册的BeginRequest事件处理URLWrite，不过这里还使用了委托，委托CSContext来执行重写方法，在CSHttpModule中的方法调用UrlWriteProvider里的抽象函数获取匹配替换后的新的URL，要执行匹配，需要根据配置文件来筛选，在CS中有很多应用，如果在每个请求到达时都执行匹配，执行效率会很低的，CS在这里做了筛选，先根据URL判断其属于那个应用，这里叫Location，在配置节里的Locations就是设置这个的，这样判断了其所属的location后只需要匹配此Location下的URL即可，大大减少了匹配次数，当然这里还有一个URLMapping对应配置节的mappings（默认CSSDK中未配置这一项），这可以把一种location映射成为另一种location，这在扩展中也很有用，执行URL匹配时，通过正则表达式匹配配置节URL里的pattern，遇到匹配成功即可替换为vanity，当然生成URL的适合也是使用同一配置里的path，这样三个属性就构成了一个完整的URL配置。当然transformers配置节里是执行替换，这在最初读取配置的时候循环替换每个URL配置节里的Path和pattern，比如把##blogdirectory##替换为Pages/{0}/blog/，这样就使配置更灵活，如果需要修改Location的值将是很简单的一件事情。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 举例来说，如果需要把CS中默认的URL（.aspx）改为.html结尾的URL，理论上只需要修改各URL中的path和pattern两个属性，注意：只能这两个属性同时出现的URL配置才能修改其扩展名，因为这样的URL才能执行重写。</span></p>
<img src ="http://www.cnblogs.com/Dragonpro/aggbug/436486.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41789/" target="_blank">[新闻]亚洲社交网站Friendster将兼容竞争对手窗件</a>]]></description></item><item><title>Community Server系列之十：让CS2支持中文搜索</title><link>http://www.cnblogs.com/Dragonpro/archive/2006/06/10/CS2ChineseSearch.html</link><dc:creator>Felix</dc:creator><author>Felix</author><pubDate>Sat, 10 Jun 2006 07:21:00 GMT</pubDate><guid>http://www.cnblogs.com/Dragonpro/archive/2006/06/10/CS2ChineseSearch.html</guid><wfw:comment>http://www.cnblogs.com/Dragonpro/comments/422504.html</wfw:comment><comments>http://www.cnblogs.com/Dragonpro/archive/2006/06/10/CS2ChineseSearch.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cnblogs.com/Dragonpro/comments/commentRss/422504.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Dragonpro/services/trackbacks/422504.html</trackback:ping><description><![CDATA[摘要:  前面几节里有朋友提到CS2对中文搜索支持的不好，那么这一节就提前到这里来讲讲怎样解决CS2对中文搜索的问题。 我们都知道，英文和中文语言上的不同导致了处理英文和中文的不同方法，最明显的不同就是英文是以单词为最小单位，而中文则是以字为最小单位，这样造成了程序上的不一样，而在CS2中默认的搜索模块只考虑到英文这一方面，对中文相当于不认识了，怎样让其认识中文呢，这就需要我们来分析CS2处理搜索的机制。&nbsp;&nbsp;<a href='http://www.cnblogs.com/Dragonpro/archive/2006/06/10/CS2ChineseSearch.html'>阅读全文</a><img src ="http://www.cnblogs.com/Dragonpro/aggbug/422504.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41788/" target="_blank">[新闻]百度宣布服务器全面换装闪存 替代硬盘</a>]]></description></item><item><title>Community Server系列之九：CS2中的用户管理1（MemberRole）</title><link>http://www.cnblogs.com/Dragonpro/archive/2006/06/07/420116.html</link><dc:creator>Felix</dc:creator><author>Felix</author><pubDate>Wed, 07 Jun 2006 15:51:00 GMT</pubDate><guid>http://www.cnblogs.com/Dragonpro/archive/2006/06/07/420116.html</guid><wfw:comment>http://www.cnblogs.com/Dragonpro/comments/420116.html</wfw:comment><comments>http://www.cnblogs.com/Dragonpro/archive/2006/06/07/420116.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnblogs.com/Dragonpro/comments/commentRss/420116.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Dragonpro/services/trackbacks/420116.html</trackback:ping><description><![CDATA[<p align=left><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 近期由于身心不适，一直没更新，现又拿起笔，继续这个系列&#8230;&#8230;</em><br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CS中的用户及权限管理是比较复杂的，了解其中的用户及权限有关的机制对掌握CS的核心是至关重要的，现就对CS中的用户管理机制作一个简要介绍。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CS是在Asp.Net1.1时代出现的，固然，在CS1系列中使用的权限机制是建立在微软MemberRole1.0之上的，那么在CS2中仍然沿袭了这一模块。不过我们可以看到CS2针对ASP1.1和Asp2.0做了两套方案，这样我们就可以在.net1.1状态下用MemberRole1.0在.net2.0状态下用ASP.NET2.0自带的MemberRole。那么CS2中是怎样做到这么灵活的配置的呢，下面就一一道来：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 前面一系列的文章提到在CS2中运用的一种很常见的模式－代理模式，代理模式诸多优点我就不在这里细说了，最突出的那就是可以在自己的规则里使用第三方组建，而不会直接依赖第三方组建，当第三方组建变动的时候，只需要改代理层即可，同样，在CS2处理MemberRole的时候也用到了此模式，下面我们就看看此模式带来了什么。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 让我们先来看看CommunityServerComponents这个项目，这个项目为CS的核心，里面定义了CS运行所需要的抽象类、接口、公用方法、实体类等等，显然要定义MemberRole的接口当然也应该在此定义了，这也符合接口倒置原则，接口的使用者定义接口，而不是提供者。打开项目里的\Components\Provider\User\文件夹，此文件夹内就是全部接口的定义和调用规则了：<br></p>
<div align=center src_cetemp="/images/cnblogs_com/dragonpro/CommunityServer/CS_9_1.gif"><img height=526 alt="" src="http://www.cnblogs.com/images/cnblogs_com/dragonpro/CommunityServer/CS_9_1.gif" width=557 border=0></div>
<div align=left src_cetemp="/images/cnblogs_com/dragonpro/CommunityServer/CS_9_2.gif">
<div align=center src_cetemp="/images/cnblogs_com/dragonpro/CommunityServer/CS_9_2.gif"><img height=271 alt="" src="http://www.cnblogs.com/images/cnblogs_com/dragonpro/CommunityServer/CS_9_2.gif" width=483 border=0></div>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 上图调用MemberRole组建的所有接口定义，可以看出这里除了MemberRoleProfileProvider这个抽象类有实体方法外，其他都为接口定义，调用的时候当然是调用MemberRoleProfileProvider里面的实体方法了，这里的方法告诉我们通过配置找到需要加载的代理组建并适时加载：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;MemberRoleProfileProvider()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CSConfiguration&nbsp;config&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;CSConfiguration.GetConfig();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Provider&nbsp;provider&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;config.Providers[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">MemberRoleProfileProvider</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #0000ff">as</span><span style="COLOR: #000000">&nbsp;Provider;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(provider&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(Globals.IsNullorEmpty(provider.Type))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Exception(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">MemberUserRoleProvider&nbsp;provider&nbsp;found,&nbsp;but&nbsp;no&nbsp;type&nbsp;attribute&nbsp;was&nbsp;specified</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type&nbsp;type&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Type.GetType(provider.Type);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(type&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Exception(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.Format(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">MemberUserRoleProvider&nbsp;Provider&nbsp;Type&nbsp;{0}&nbsp;could&nbsp;not&nbsp;be&nbsp;loaded</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,provider.Type));<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;murp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Activator.CreateInstance(type)&nbsp;</span><span style="COLOR: #0000ff">as</span><span style="COLOR: #000000">&nbsp;MemberRoleProfileProvider;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(murp&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Exception(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">MemberUserRoleProvider&nbsp;could&nbsp;not&nbsp;be&nbsp;loaded&nbsp;from&nbsp;the&nbsp;type&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;provider.Type);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span></div>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个静态方法就是为了完成此项工作的了。<br>配置节点在CommunityServer.config里的providers的MemberRoleProfileProvider，这就告诉CS2需要使用哪个代理来处理MemberRole。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">add&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #ff0000">name&nbsp;</span><span style="COLOR: #0000ff">=&nbsp;"MemberRoleProfileProvider"</span><span style="COLOR: #ff0000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type&nbsp;</span><span style="COLOR: #0000ff">=&nbsp;"CommunityServer.MemberRole.CSMemberRoleProfileProvider,&nbsp;CommunityServer.MemberRole"</span><span style="COLOR: #ff0000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br></span></div>
<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'; mso-no-proof: yes">&nbsp;&nbsp;&nbsp; 好了，看完了接口我们不难猜到代理层应该做什么了，当然是实现这些接口了：<br>
<div align=center src_cetemp="/images/cnblogs_com/dragonpro/CommunityServer/CS_9_3.gif"><img height=46 src="http://www.cnblogs.com/images/cnblogs_com/dragonpro/CommunityServer/CS_9_3.gif" width=265 border=0></div>
</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们可以看到在CS2中有两个MemberRole代理层，一个是针对MemberRole1的，另一个则是针对ASP.NET2.0的MemberRole，这两个组件我们选择一个就行，具体选择什么我们就在配置文件里填上相应的组件的代理程序集（也就是上图显示的项目）就OK了，因为他们都正确的实现了CS定义的接口，需要说明的是，CS2默认使用MemberRole1.0，如果需要使用Asp.net2.0中的MemberRole则还需要运行项目里面的SQL脚本升级数据库。现在我们着重看看CommunityServer.MemberRole这个实现了MemberRole1.0的代理层：<br><img height=461 src="http://www.cnblogs.com/images/cnblogs_com/dragonpro/CommunityServer/CS_9_4.gif" width=699 border=0><br><img src="http://www.cnblogs.com/images/cnblogs_com/dragonpro/CommunityServer/CS_9_5.gif" border=0><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这里我们可以看到，在主要的CSMemberRoleProfileProvider里只引用了CSRoles、CSProfiles、CSMembership，那么其余的实现MemberRole怎样知道呢，这就需要在WEB.config中进行指定，打开WEB.config文件我们可以看到在configSections节点有如下的配置：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">sectionGroup&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="memberrolesprototype"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">section&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="membership"</span><span style="COLOR: #ff0000">&nbsp;type</span><span style="COLOR: #0000ff">="Microsoft.ScalableHosting.Configuration.MembershipConfigHandler,&nbsp;MemberRole,&nbsp;Version=1.0.0.0,&nbsp;Culture=neutral,&nbsp;PublicKeyToken=b7c773fb104e7562"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">section&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="roleManager"</span><span style="COLOR: #ff0000">&nbsp;type</span><span style="COLOR: #0000ff">="Microsoft.ScalableHosting.Configuration.RolesConfigHandler,&nbsp;MemberRole,&nbsp;Version=1.0.0.0,&nbsp;Culture=neutral,&nbsp;PublicKeyToken=b7c773fb104e7562"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">section&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="profile"</span><span style="COLOR: #ff0000">&nbsp;type</span><span style="COLOR: #0000ff">="Microsoft.ScalableHosting.Configuration.ProfileConfigHandler,&nbsp;MemberRole,&nbsp;Version=1.0.0.0,&nbsp;Culture=neutral,&nbsp;PublicKeyToken=b7c773fb104e7562"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">section&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="anonymousIdentification"</span><span style="COLOR: #ff0000">&nbsp;type</span><span style="COLOR: #0000ff">="Microsoft.ScalableHosting.Configuration.AnonymousIdConfigHandler,&nbsp;MemberRole,&nbsp;Version=1.0.0.0,&nbsp;Culture=neutral,&nbsp;PublicKeyToken=b7c773fb104e7562"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">sectionGroup</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>还有在profile节点的<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">providers</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">add&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="CommunityServerSqlProvider"</span><span style="COLOR: #ff0000">&nbsp;type</span><span style="COLOR: #0000ff">="CommunityServer.MemberRole.CSProfileProvider,&nbsp;CommunityServer.MemberRole"</span><span style="COLOR: #ff0000">&nbsp;connectionStringName</span><span style="COLOR: #0000ff">="SiteSqlServer"</span><span style="COLOR: #ff0000">&nbsp;applicationName</span><span style="COLOR: #0000ff">="dev"</span><span style="COLOR: #ff0000">&nbsp;description</span><span style="COLOR: #0000ff">="Stores&nbsp;and&nbsp;retrieves&nbsp;profile&nbsp;data&nbsp;from&nbsp;the&nbsp;local&nbsp;Microsoft&nbsp;SQL&nbsp;Server&nbsp;database"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">providers</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></span></div>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这些就是告诉系统需要怎样调用MemberRole了<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过配置好上面的各项，就可以在系统里实现其基本的用户管理了，当然我们会看到CS2在处理用户管理的时候还做了非常多的工作，这也不是一时半会儿能讨论清楚的，先在这里抛砖一下，更多高级应用还得需要大家慢慢体会。</div>
<img src ="http://www.cnblogs.com/Dragonpro/aggbug/420116.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41787/" target="_blank">[新闻]诺基亚发布奢华碳纤维版8800 Arte</a>]]></description></item><item><title>Community Server系列之八：CS2中的CSContext</title><link>http://www.cnblogs.com/Dragonpro/archive/2006/05/17/402044.html</link><dc:creator>Felix</dc:creator><author>Felix</author><pubDate>Tue, 16 May 2006 16:45:00 GMT</pubDate><guid>http://www.cnblogs.com/Dragonpro/archive/2006/05/17/402044.html</guid><wfw:comment>http://www.cnblogs.com/Dragonpro/comments/402044.html</wfw:comment><comments>http://www.cnblogs.com/Dragonpro/archive/2006/05/17/402044.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/Dragonpro/comments/commentRss/402044.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Dragonpro/services/trackbacks/402044.html</trackback:ping><description><![CDATA[摘要:  由于WEB请求是无状态的，在请求过程中需要保存的共享信息保存在HttpContext中，在Http请求过程中HttpContext始终贯穿整个请求过程，在CS2中相当于对HTTPContext进行了扩展，除了包含HTTPContext中的信息外，CSContext还包含了在CS的整个请求过程中需要共享的自己的数据，如当前请求的用户、Section、Post等等公用数据。 在CS中，一个页面往往涉&nbsp;&nbsp;<a href='http://www.cnblogs.com/Dragonpro/archive/2006/05/17/402044.html'>阅读全文</a><img src ="http://www.cnblogs.com/Dragonpro/aggbug/402044.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41783/" target="_blank">[新闻]微软披露Windows 7功能开发团队名单</a>]]></description></item><item><title>Community Server系列之七：快速找到需要修改的文件[技巧]</title><link>http://www.cnblogs.com/Dragonpro/archive/2006/05/07/393475.html</link><dc:creator>Felix</dc:creator><author>Felix</author><pubDate>Sun, 07 May 2006 15:16:00 GMT</pubDate><guid>http://www.cnblogs.com/Dragonpro/archive/2006/05/07/393475.html</guid><wfw:comment>http://www.cnblogs.com/Dragonpro/comments/393475.html</wfw:comment><comments>http://www.cnblogs.com/Dragonpro/archive/2006/05/07/393475.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cnblogs.com/Dragonpro/comments/commentRss/393475.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Dragonpro/services/trackbacks/393475.html</trackback:ping><description><![CDATA[摘要:  CS中的模板几乎遍布整个应用，当我们利用SDK做二次开发的时候，我们需要很长的熟悉过程，而这个过程大部分时间被烦躁的检索所占据，检索模板、检索类文件，检索类文件我们可以使用类视图快速定位到类所在的文件。然而确定需要修改的模板或需要修改的类却不是那么方便的事情。CS在这里为我们做了一些工作，但并不是特别方便，按照下面的方法即可直观的找到需要修改的文件。 在CS中，如果是调试项目，在生成的HTML代&nbsp;&nbsp;<a href='http://www.cnblogs.com/Dragonpro/archive/2006/05/07/393475.html'>阅读全文</a><img src ="http://www.cnblogs.com/Dragonpro/aggbug/393475.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41782/" target="_blank">[新闻]谷歌Android SDK软件界面浮现</a>]]></description></item><item><title>Community Server系列之六：CS2中的关键词及数据结构</title><link>http://www.cnblogs.com/Dragonpro/archive/2006/04/30/389671.html</link><dc:creator>Felix</dc:creator><author>Felix</author><pubDate>Sun, 30 Apr 2006 12:45:00 GMT</pubDate><guid>http://www.cnblogs.com/Dragonpro/archive/2006/04/30/389671.html</guid><wfw:comment>http://www.cnblogs.com/Dragonpro/comments/389671.html</wfw:comment><comments>http://www.cnblogs.com/Dragonpro/archive/2006/04/30/389671.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnblogs.com/Dragonpro/comments/commentRss/389671.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Dragonpro/services/trackbacks/389671.html</trackback:ping><description><![CDATA[<p><span lang=EN-US><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>写这篇帖子的目的在于介绍整个</span><span lang=EN-US>CS</span><span>中的关键点，以我的经验来看着重应该了解的地方的一些罗列。这对初次接触</span><span lang=EN-US>CS</span><span>的朋友来说我想是有帮助的。</span></p>
<p><span lang=EN-US><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>模块：在</span><span lang=EN-US>CS2</span><span>中最主要的官方模块有（论坛</span><span lang=EN-US>Forums</span><span>、博客</span><span lang=EN-US>Blogs</span><span>、相册</span><span lang=EN-US>Galleries</span><span>）现在只讨论主要的这三个模块，下面的文字也围绕着这三个模块进行讨论。这三个模块具有一定的共同点，</span><span lang=EN-US>CS</span><span>把这三个模块抽象到一起了，这是</span><span lang=EN-US>CS</span><span>的核心所在。</span></p>
<p><span lang=EN-US><span></p>
<p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td vAlign=top width=91>
            <p><b><span>名称</span></b></p>
            </td>
            <td vAlign=top width=187>
            <p><b><span>说明</span></b></p>
            </td>
            <td vAlign=top width=172>
            <p><b><span>主要数据表</span></b></p>
            </td>
            <td vAlign=top width=118>
            <p><b><span>备注</span></b></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><b><span>Section</span></b></p>
            </td>
            <td vAlign=top width=187>
            <p><span>基本板块：论坛里表现为论坛的板块，博客里表现为每个人的博客，相册表现为每个人的相册。</span></p>
            </td>
            <td vAlign=top width=172>
            <p><span>cs_Sections</span><span>主要保存模块数据包括模块的组别名称所有者等等。</span></p>
            <p>&nbsp;</p>
            </td>
            <td vAlign=top width=118>
            <p><span>CS</span><span>中很重要的一个概念，几乎所有的逻辑都与此相关。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><b><span>Group</span></b></p>
            </td>
            <td vAlign=top width=187>
            <p><span>组别，在</span><span>CS</span><span>中的几乎所有标准模块都依靠</span><span>Group</span><span>进行管理，论坛的</span><span>Group</span><span>表现为对论坛板块的分类，博客表现为博客的群组，相册也表现为群组，总之，这些模块都要依赖此进行管理</span></p>
            </td>
            <td vAlign=top width=172>
            <p><span>cs_Groups</span><span>，主要保存分组信息</span></p>
            </td>
            <td vAlign=top width=118>
            <p><span>所有</span><span>Section</span><span>都依赖此进行组合，就算一个</span><span>Section</span><span>也需要一个默认</span><span>Group</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><b><span>Settings</span></b></p>
            </td>
            <td vAlign=top width=187>
            <p><span>几乎每张表都有</span><span>SettingsID</span><span>的字段用来区分不同的应用，因为</span><span>CS</span><span>一个程序可以同时分成多个应用而互不干扰，每个存储过程，每张表都有相应的对</span><span>Settings</span><span>的筛选</span></p>
            </td>
            <td vAlign=top width=172>
            <p><span>cs_SiteSettings</span><span>，站点的基本设置以</span><span>XML</span><span>的形式保存在此</span></p>
            <p><span>cs_Sites</span><span>站点信息，可设置多个站点</span></p>
            <p><span>cs_SiteMappings</span><span>站点和</span><span>Settings</span><span>的对应关系</span></p>
            </td>
            <td vAlign=top width=118>
            <p><span>这个概念同样重要，现在很多程序都设计成这样的模式，一句话，尽量灵活，</span><span>CS</span><span>的灵活性非常到位。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><b><span>Thread</span></b></p>
            </td>
            <td vAlign=top width=187>
            <p><span>线程，这个感念比较抽象，但在</span><span>CS</span><span>中却是很重要的，这个意思可以简单的认为是一个主题，并包含这个主题所有的相关信息，比如回复数，得分等等</span></p>
            </td>
            <td vAlign=top width=172>
            <p><span>cs_Threads</span><span>，保存每个主题信息，</span></p>
            <p><span>cs_ThreadsRead</span><span>，阅读者对每个主题的阅读情况</span></p>
            </td>
            <td vAlign=top width=118>
            <p><span>在每发表一篇主题（非回复）就在此表添加一条记录</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><b><span>Post</span></b></p>
            </td>
            <td vAlign=top width=187>
            <p><span>表示包括主题在内的所有用户发表的帖子，无论是回复还是投票或主题统统要在此记录</span></p>
            </td>
            <td vAlign=top width=172>
            <p><span>cs_Posts</span><span>，保存</span><span>Post</span><span>的主要数据表其他与</span><span>Post</span><span>相关的表还有很多</span></p>
            </td>
            <td vAlign=top width=118>
            <p><span>最重要的用户数据表</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><b><span>Category</span></b></p>
            </td>
            <td vAlign=top width=187>
            <p><span>分类，帖子分类，此分类是针对</span><span>Section</span><span>进行的，每个</span><span>Section</span><span>都可以有自己的分类，在</span><span>CS</span><span>中又叫</span><span>TAG</span><span>，可以适当改造一下就变为时下流行的</span><span>TAG</span><span>功能</span></p>
            </td>
            <td vAlign=top width=172>
            <p><span>cs_Post_Categories</span><span>＆</span><span>cs_Post_Categories_Parents</span><span>保存每个</span><span>Section</span><span>的分类统计</span></p>
            <p><span>cs_Posts_InCategories</span><span>保存每篇帖子对应的分类</span></p>
            </td>
            <td vAlign=top width=118>
            <p><span>CS</span><span>中只有对每个</span><span>Section</span><span>的分类管理，而缺少对整个网站的分类，我们可以按照</span><span>Category</span><span>模块进行扩展</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><b><span>Permission</span></b></p>
            </td>
            <td vAlign=top width=187>
            <p><span>授权，与</span><span>Role</span><span>角色挂钩，此针对各</span><span>Section</span><span>设置各种角色的对应权限，也就是权限矩阵</span></p>
            </td>
            <td vAlign=top width=172>
            <p><span>cs_ProductPermissions</span><span>在此保存针对每种应用模块的默认权限。</span><span>cs_SectionPermissions</span><span>针对各种</span><span>Section</span><span>的个性权限</span></p>
            </td>
            <td vAlign=top width=118>
            <p><span>此处缺少对</span><span>Group</span><span>的默认权限，不过根据源代码扩充为支持</span><span>Group</span><span>默认权限的功能也很容易</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><b><span>Membership</span></b></p>
            </td>
            <td vAlign=top width=187>
            <p><span>建立在微软的</span><span>Membership</span><span>组件下的基于角色的用户管理系统，使用此功能对设置权限和对用户相关功能的扩充都非常方便</span></p>
            </td>
            <td vAlign=top width=172>
            <p><span>以</span><span>asp_net</span><span>打头的数据表是</span><span>Membership</span><span>所需要的，另外</span><span>cs</span><span>中扩展了</span><span>cs_Users</span><span>及</span><span>cs_UserProfile</span><span>等数据表</span></p>
            </td>
            <td vAlign=top width=118>
            <p><span>CS</span><span>完全依靠</span><span>Membership</span><span>达键的用户基础管理系统，很多地方值得好好研究</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=91>
            <p><b><span>Job</span></b></p>
            </td>
            <td vAlign=top width=187>
            <p><span>B/S</span><span>程序需要定时处理的功能，在此称为</span><span>Job</span><span>，我们可以在</span><span>communityserver.config</span><span>文件中看到那些</span><span>Job</span><span>的配置，运行这些</span><span>Job</span><span>都是在单独的线程中执行，与用户交互无关</span></p>
            </td>
            <td vAlign=top width=172>
            <p><span>无</span></p>
            </td>
            <td vAlign=top width=118>
            <p><span>可以通过后台管理的</span><span>Jobs Report</span><span>查看</span><span>Job</span><span>的情况，也可通过查看</span><span>Exception Report</span><span>查看<span>Jobs</span>有无运行异常</span></p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">熟悉这些关键词及模块对</span><span lang=EN-US>CS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的掌握至关重要，希望通过此篇介绍能帮助你更快的了解</span><span lang=EN-US>CS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的基础。</span></p>
</span></span></span></span>
<img src ="http://www.cnblogs.com/Dragonpro/aggbug/389671.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41781/" target="_blank">[新闻]谷歌生活搜索增加“影讯”</a>]]></description></item><item><title>Community Server系列之五：CS2中的Ajax原理</title><link>http://www.cnblogs.com/Dragonpro/archive/2006/04/26/385925.html</link><dc:creator>Felix</dc:creator><author>Felix</author><pubDate>Wed, 26 Apr 2006 12:12:00 GMT</pubDate><guid>http://www.cnblogs.com/Dragonpro/archive/2006/04/26/385925.html</guid><wfw:comment>http://www.cnblogs.com/Dragonpro/comments/385925.html</wfw:comment><comments>http://www.cnblogs.com/Dragonpro/archive/2006/04/26/385925.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cnblogs.com/Dragonpro/comments/commentRss/385925.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Dragonpro/services/trackbacks/385925.html</trackback:ping><description><![CDATA[摘要: 上一节用了一个示例说明了Ajax在CS2中的一点简单的应用，这一节里着重探讨一下CS2中的Ajax的高级应用和实现原理，在了解Ajax的实现原理前我觉得有必要先了解一下aspx页面从请求到返回HTML都做了些什么，我想在了解了页面处理机制再来认识Ajax处理原理应该应该会很有帮助的，见下表： 序号 阶段 页面事件 可覆盖的方法 1 页面初始化 Init 2 加载视图状态 LoadViewState&nbsp;&nbsp;<a href='http://www.cnblogs.com/Dragonpro/archive/2006/04/26/385925.html'>阅读全文</a><img src ="http://www.cnblogs.com/Dragonpro/aggbug/385925.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41780/" target="_blank">[新闻]《电脑报》:《星际争霸2》掘金中国悬疑</a>]]></description></item><item><title>Community Server系列之四：Ajax在CS2.0中的应用1</title><link>http://www.cnblogs.com/Dragonpro/archive/2006/04/25/384972.html</link><dc:creator>Felix</dc:creator><author>Felix</author><pubDate>Tue, 25 Apr 2006 14:06:00 GMT</pubDate><guid>http://www.cnblogs.com/Dragonpro/archive/2006/04/25/384972.html</guid><wfw:comment>http://www.cnblogs.com/Dragonpro/comments/384972.html</wfw:comment><comments>http://www.cnblogs.com/Dragonpro/archive/2006/04/25/384972.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cnblogs.com/Dragonpro/comments/commentRss/384972.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Dragonpro/services/trackbacks/384972.html</trackback:ping><description><![CDATA[&nbsp;<span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Ajax</span><span>技术在时下很热门，当然在</span><span>CS2.0</span><span>中也不例外的运用到了此技术，</span><span>CS2</span><span>中没有使用任何第三方</span><span>Ajax</span><span>控件，这就给我们提供一个研究</span><span>Ajax</span><span>机理的好地方，现介绍一下在</span><span>CS2</span><span>中</span><span>Ajax</span><span>的一些简单应用，并分析应用的原理。</span>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>我想要研究此技术最好的办法就是把代码分离出来放在自己的工程中，重现这些功能，在重现这些功能的时候一定会遇到这样或那样的问题，这恰好是我们应该着重研究的地方，所以让我们先来分离代码吧。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>就拿</span><span>CS</span><span>中的一个</span><span>Ajax</span><span>小应用来说，当具有系统管理员权限的用户进入后，可以看到页面的标题和一些新闻内容是可以无刷新改变的，让我们先从此处下手吧。找到相应的控件页面，我们会发现，这些控件引用的一些文件，我现在先把它们列出来，下面的截图是我在分析</span><span>TitleBar</span><span>代码后分离出来的：<br><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/dragonpro/CommunityServer/CS_4_1.gif" border=0><img height=65 alt="" src="http://www.cnblogs.com/images/cnblogs_com/dragonpro/CommunityServer/CS_4_2.gif" width=171 border=0><br>&nbsp; </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>参看上图，有这么几个文件是很关键的：</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AjaxManager.cs</span><span>主要提供</span><span>Ajax</span><span>应用所需要的功能枚举等等，此文件包含三个类见图</span><span>2</span><span>，其中</span><span>AjaxManager</span><span>里面包含了几个静态方法，这个是关键。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Global.js</span><span>这个文件主要包含两个重要的脚本函数来处理客户端的</span><span>Ajax</span><span>提交，另外还有一些很有用的js函数。</span></p>
<p><span>当然，这两个文件只是基础，要使用</span><span>ajax</span><span>必需要相应的页面的配合和对</span><span>js</span><span>编程的熟悉，现在让我们来了解一下</span><span>Ajax</span><span>的机理，</span><span>Ajax</span><span>说白了就是使用</span><span>JS</span><span>脚本和</span><span>XMLHttp</span><span>技术在后台提交数据到服务器，经过服务器相应方法的处理后把数据返回给客户端，由于数据在后台提交的，用户只看到数据的变化却看不到页面的刷新，功能酷酷的，实现起来也不难，这就开始了：</span></p>
<p><span>首先让我们看看在</span><span>CS2</span><span>中的</span><span>Ajax</span><span>的实现原理<br><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/dragonpro/CommunityServer/CS_4_3.gif" border=0><br>&nbsp; </p>
<p><span>按照上图的步骤来分析，并且以一个实例来了解它，这个示例很简单：在客户端提供两个用户输入的数字，提交到服务器进行计算，并把计算结果返回给客户端。</span></p>
<p><span>（</span><span><a href="/Files/Dragonpro/CS_Ajax.rar"><span><span>在看下面的解说之前最好先下载本篇文章的示例程序结合着看。</span></span></a></span><span>）</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>首先，我们建立一个</span><span>aspx</span><span>的页面，这里命名为</span><span>Default.aspx</span><span>，第一步要在提交请求的时候让页面注册</span><span>Ajax_CallBack</span><span>脚本（此脚本即是客户端和服务器通讯的关键），这里我们的后台代码很简单你可以在</span><span>Page_Load</span><span>方法里写成这样</span><span>if</span><span>(!<span>this</span>.IsPostBack) AjaxManager.Register(<span>this</span>,"Counter");</span><span>可以看出调用了<span>AjaxManager</span>的静态方法，此方法的作用就是分析传进去的参数<span>(</span>这里的参数为<span>this</span>也就是页面的引用<span>)</span>，生成客户端<span>Ajax_CallBack</span>脚本。在生成脚本之前自动去找在此页面有多少个带了<span>AjaxMethod</span>属性的方法，一个服务器方法对应一个客户端<span>Ajax_CallBack</span>方法，生成了客户端脚本后我们只需要在客户端写上少量的调用方法即可与服务器通讯了。在这里注册到客户端的脚本为：<br></p>
<div><span>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">"</span><span style="COLOR: #000000">CounterEnter</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">:&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(first,&nbsp;second,&nbsp;clientCallBack)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;Ajax_CallBack('ASP.Default_aspx',&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">,&nbsp;'CounterEnter',&nbsp;[first,second],&nbsp;clientCallBack,&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,'</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">cs_ajax</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">Default.aspx</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">Ajax_CallBack</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">');<br>}</span></div>
</span><br><span>有了这个脚本，客户端的工作并没有做完，因为还没有让客户端控件响应操作，这里就需要我们手动写一些操作代码了，不过一般不会太复杂，比如这里我们只需要在页面加多这样的<span lang=EN-US>js</span>语句快：<br></div>
<div><span>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;CounterEnter(){<br>$('txtResult').value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;iteSettings.CounterEnter($('txtFirst').value,$('txtSecond').value,</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">).value;&nbsp;}</span></div>
</span></div>
<br>&nbsp;&nbsp;&nbsp;&nbsp; 在客户端的按钮onclick事件上调用此函数即可，这段客户端的代码也许有人会迷糊，其中&#8220;$&#8221;函数是Glogal.js文件中的，等同于document.getElementById，iteSettings.CounterEnter则是调用前面注册到客户端的脚本，那么这段代码的意思是传递第一个和第二个输入筐的值到服务器器上的CounterEnter方法，并把返回的结果付给txtResult的文本框，前面已经提到过服务器上的CounterEnter方法此方法带有AjaxMethod属性，程序会自动找到此方法并执行的。至于怎么找到的，在后面详解，服务器方法在执行完此方法后返回结果，返回的值通过AjaxManager的相关方法以js脚本的形式Response给客户端（形式如：{value:&#8217;aaa&#8217;,error:null}），在得到这个返回对象后我们只需要调用其中的Value属性即可获取返回的值。<br>&nbsp;&nbsp;&nbsp; 那么服务器怎样去分辨是Get请求还是PostBack或者AjaxPostBack呢，只有分清楚了这个才能在该执行的时候执行相应的方法，好的，其实在这里通过Get方法和AjaxPost的数据asp.net都不认为是回发给服务器，这样一来我们在PageLoad代码里的写的if(!this.IsPostBack)对两者请求都视为等效，那么通过后台的AjaxPost请求的页面同样会去执行AjaxManager.Register方法，那么我们看看此方法除了注册客户端JS代码还做了写什么呢。我们注意到在最后一段代码里有一句：control.PreRender += new EventHandler(OnPreRender);这句话就是在当即将Response给客户端页面的时候执行OnPreRender方法先，此方法的作用即是判断客户端提交的参数里是否有Ajax参数，如果有就判断此次Request为Ajax提交，需要执行服务器的相关方法，此处通过一系列的跳转和反射找到了应该调用的方法并执行，返回执行完后的结果给客户端并中止页面继续Responst，这样就完成了一个完整的Ajax调用，当然在AjaxManager里面有很多细节在这里没有详细写出来，如有异议或疑问希望多多指正和探讨，也希望此篇帖子能起到抛砖引玉的作用，给大家一个小小的参考。<br>&nbsp;&nbsp; 下一篇将介绍Ajax在CS2中的高级应用，<a href="/Files/Dragonpro/CS_Ajax.rar">本文示例下载</a>。</span></span></span></span> 
<img src ="http://www.cnblogs.com/Dragonpro/aggbug/384972.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41779/" target="_blank">[新闻]IBM开发成功22纳米SRAM 更快更节能</a>]]></description></item><item><title>Community Server系列之三：页面间关系2[介绍]</title><link>http://www.cnblogs.com/Dragonpro/archive/2006/04/24/383900.html</link><dc:creator>Felix</dc:creator><author>Felix</author><pubDate>Mon, 24 Apr 2006 12:54:00 GMT</pubDate><guid>http://www.cnblogs.com/Dragonpro/archive/2006/04/24/383900.html</guid><wfw:comment>http://www.cnblogs.com/Dragonpro/comments/383900.html</wfw:comment><comments>http://www.cnblogs.com/Dragonpro/archive/2006/04/24/383900.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnblogs.com/Dragonpro/comments/commentRss/383900.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Dragonpro/services/trackbacks/383900.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CS中几乎所有的页面都是靠模板的呈现方式来实现的，那么CS中有些什么样的模板呢，让我们看看CS中的模板机制吧：
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在我们使用IDE打开Default.aspx页面时，我们仅仅看到一些毫无顺序的控件，几乎看不到控制布局的Html标签，不要困惑，因为在CS中UI层也是按照模板思想分层实现的。先来看看几个类的实现：</p>
<p>打开\src\Controls\ContentContainer.cs</p>
<p>这个文件里分别实现了</p>
<p align=left>public class MPContainer : MetaBuilders.WebControls.MasterPages.ContentContainer{&#8230;}</p>
<p align=left>public class MPRegion : MetaBuilders.WebControls.MasterPages.Region{}</p>
<p align=left>public class MPContent : MetaBuilders.WebControls.MasterPages.Content{}</p>
<p align=left>public class MPForm : MetaBuilders.WebControls.MasterPages.NoBugForm {}</p>
<p>public class MPScript : System.Web.UI.WebControls.PlaceHolder {}</p>
<p>这些类前四个都继承自MetaBuilders.WebControls.MasterPages，那么为什么CS不直接使用这些控件呢，因为这是第三方控件，主动权不在CS中，CS为了隔离控件变动使用了代理模式，这样就可以在程序里使用统一的方法，不用担心以后第三方控件的变动了，同样，在CS系统里还大量运用了此模式，比如在使用FreeTextBox的时候不是直接使用，而是通过Telligent.FreeTextBoxWraper这个类进行封装隔离，并且同时继承自ITextEditor接口，这样程序里面在需要用到文本编辑器的时候只需要引入此接口根据配置加载文本编辑器包装类就可以了，这样处理之后撤卸和安装新扩展都会很容易，如果对此模式还不甚了解的话，我会在后面章节介绍这里的原理。</p>
<p>&nbsp;&nbsp;&nbsp; 好了，了解了这么几个控件类之后就看我们怎样在程序里面使用了，首先简单介绍一下这几个控件类的作用吧：</p>
<p>MPRegion：向页面进行注册的控件，这有点类似于那些大型的新闻静态页面发布系统的标识符，生成静态页面的时候根据标识符替换相应的动态数据。</p>
<p>MPForm ：作用很简单，就是为客户端生成Form标签。</p>
<p>MPContainer ：包容MPContent控件的容器控件。</p>
<p>MPContent：此控件的ID只要和在Master页面设置的MPRegion控件的ID一致，那么此控件中的内容便自动嵌入到MPRegion控件的位置了，此控件必须用在MPContainer之内。</p>
简单介绍了这些控件之后如果你是初次接触CS那么肯定还会很迷糊，别急，让我们先了解在CS中模板的&#8220;继承&#8221;关系，虽然不是严格的继承但我们可以这样理解，让我们打开具体的风格文件夹在这里我们看看在\src\Web\Themes\default\文件夹下的Masters文件夹，此文件夹下大部分都是以Master命名的ascx文件不难从名字可以看出，最主要的文件当然是Master.ascx了，这是所有页面都需要引用的主模板，根据继承的概念我们应该清楚在此文件里应该放一些每个页面都需要用到的Html标签等等，比如页头，公用样式，页面的布局页角以及Form标签等等，如下面的代码：<br>
<div><img id=Code_Closed_Image_205022 onclick="this.style.display='none'; Code_Closed_Text_205022.style.display='none'; Code_Open_Image_205022.style.display='inline'; Code_Open_Text_205022.style.display='inline';" height=16 src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_205022 onclick="this.style.display='none'; Code_Open_Text_205022.style.display='none'; Code_Closed_Image_205022.style.display='inline'; Code_Closed_Text_205022.style.display='inline';" height=16 src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top>Master.ascx<br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Frameset//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"&gt;&nbsp;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&lt;html&nbsp;xmlns="http://www.w3.org/1999/xhtml"&nbsp;xml:lang="en"&nbsp;lang="en"&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&lt;CS:MPRegion&nbsp;id="HeaderRegion"&nbsp;runat="server"&nbsp;&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&lt;CS:Head&nbsp;runat="Server"&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=iso-8859-1"&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;CS:Style&nbsp;id="UserStyle"&nbsp;runat="server"&nbsp;visible&nbsp;=&nbsp;"true"&nbsp;/&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;CS:Style&nbsp;id="s2"&nbsp;runat="server"&nbsp;visible&nbsp;=&nbsp;"true"&nbsp;Href="../style/Common.css"&nbsp;/&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;CS:Style&nbsp;&nbsp;runat="server"&nbsp;Href="../style/common_print.css"&nbsp;media="print"&nbsp;/&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;CS:Script&nbsp;id="s"&nbsp;runat="server"&nbsp;&nbsp;/&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/CS:Head&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/CS:MPRegion&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&lt;body&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;CS:MPForm&nbsp;runat="server"&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;CS:MPRegion&nbsp;id="bscr"&nbsp;runat="server"&nbsp;/&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;id="Common"&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;id="CommonHeader"&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;CS:MPRegion&nbsp;id="bhcr"&nbsp;runat="server"&nbsp;&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;CS:TitleBar&nbsp;runat="server"&nbsp;id="t"&nbsp;/&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/CS:MPRegion&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;id="CommonBody"&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;table&nbsp;cellspacing="0"&nbsp;cellpadding="0"&nbsp;border="0"&nbsp;width="100%"&nbsp;id="CommonBodyTable"&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;valign="top"&nbsp;id="CommonLeftColumn"&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;CS:MPRegion&nbsp;id="lcr"&nbsp;runat="server"&nbsp;/&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;valign="top"&nbsp;width="100%"&nbsp;id="CommonBodyColumn"&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;CS:MPRegion&nbsp;id="bcr"&nbsp;runat="server"&nbsp;/&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;valign="top"&nbsp;id="CommonRightColumn"&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;CS:MPRegion&nbsp;id="rcr"&nbsp;runat="server"&nbsp;/&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/table&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;id="CommonFooter"&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;CS:MPRegion&nbsp;id="BodyFooterRegion"&nbsp;runat="server"&nbsp;&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;CS:Footer&nbsp;runat="server"&nbsp;id="Footer1"/&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/CS:MPRegion&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/CS:MPRegion&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/CS:MPForm&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/body&gt;<br><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&lt;/html&gt;</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从代码中我们可以看出MPRegion和MPForm这两个元素，也就是告诉&#8220;继承&#8221;自这个页面的控件什么地方应该嵌入什么。比如&lt;CS:MPRegion id="HeaderRegion" runat="server" &gt;这个标签表示如果子页面有id为HeaderRegion的MPContent这个控件对象的时候，那么此控件中的内容将插入到此处替换调默认的内容，如果子页面不存在此ID的MPContent的话则使用此标签内的内容。<o:p></o:p></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其他文件，比如HomeMaster.ascx文件表示首页的模板，此模板的基本模板还是使用Master.ascx这就好比类的继承关系，Master是基类，HomeMaster是首页的基类，default.aspx则是继承自HomeMaster的子类，只是需要在首页的MPContainer标签处标明使用哪一个模板即可，如&lt;CS:MPContainer runat="server" id="Mpcontainer1" ThemeMasterFile = "HomeMaster.ascx" &gt;一个好处就是尽量减少了重复的公用HTML标签，另外一个好处是页面可以分层，比如在设计一个较复杂的首页时，我们可以把大量的复杂的Html标签放在HomeMaster只在需要插入动态内容的地方注册MPRegion标签，这样做后我们只需要在首页里使用MPContent包含相应的动态内容而不需要被复制的Html标签搞昏了头。这就是为什么我们初次打开首页几乎看不到控制首页格式的HTML标签的原因。同理，其他模块也是如此这般，这里就不冗诉了。</p>
<img src ="http://www.cnblogs.com/Dragonpro/aggbug/383900.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41778/" target="_blank">[新闻]Windows 7 Server将被命名为Windows Server 2008 R2</a>]]></description></item><item><title>Community Server系列之二：页面之间的关系1[介绍]</title><link>http://www.cnblogs.com/Dragonpro/archive/2006/04/24/383097.html</link><dc:creator>Felix</dc:creator><author>Felix</author><pubDate>Sun, 23 Apr 2006 19:12:00 GMT</pubDate><guid>http://www.cnblogs.com/Dragonpro/archive/2006/04/24/383097.html</guid><wfw:comment>http://www.cnblogs.com/Dragonpro/comments/383097.html</wfw:comment><comments>http://www.cnblogs.com/Dragonpro/archive/2006/04/24/383097.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cnblogs.com/Dragonpro/comments/commentRss/383097.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Dragonpro/services/trackbacks/383097.html</trackback:ping><description><![CDATA[摘要: 当我们第一眼见到CS的时候你是不是被他那么纷繁复杂的结构看傻眼呢。那么在认识CS之前最好对它的页面间关系做一个全面的了解，这对我门改造CS有较大的帮助。&nbsp;&nbsp;<a href='http://www.cnblogs.com/Dragonpro/archive/2006/04/24/383097.html'>阅读全文</a><img src ="http://www.cnblogs.com/Dragonpro/aggbug/383097.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41778/" target="_blank">[新闻]Windows 7 Server将被命名为Windows Server 2008 R2</a>]]></description></item><item><title>Community Server系列之一：开篇简介</title><link>http://www.cnblogs.com/Dragonpro/archive/2006/04/24/383095.html</link><dc:creator>Felix</dc:creator><author>Felix</author><pubDate>Sun, 23 Apr 2006 18:53:00 GMT</pubDate><guid>http://www.cnblogs.com/Dragonpro/archive/2006/04/24/383095.html</guid><wfw:comment>http://www.cnblogs.com/Dragonpro/comments/383095.html</wfw:comment><comments>http://www.cnblogs.com/Dragonpro/archive/2006/04/24/383095.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/Dragonpro/comments/commentRss/383095.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Dragonpro/services/trackbacks/383095.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span>对</span><span>Community Server2.0</span><span>（简称</span><span>CS</span><span>）研究了有一些时间了，抱着学习和探讨的态度，希望写一系列的文章总结我在研究和开发过程中得到的经验和一些看法。</span>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 简介：</span><span>CS</span><span>是一个非常庞大并且严格按照</span><span>B/S</span><span>三层架构设计的社区系统，目前的最新版本为</span><span>2.0</span><span>包括有常用的社区功能（博客、论坛、相册、下载、</span><span>RSS</span><span>阅读器等等）并且可以方便的扩展其他自定义模块。可以看出使用本系统可以很容易的达建时下流行的</span><span>WEB2.0</span><span>系统，特别是在企业内部的应用中会有很大的空间，事实上我就是在使用此系统为企业达建交流平台，功能多多，等待我们发现的还有很多。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CS</span><span>系统有着严密的设计和分层机制，严格按照三层架构达建，非常适合团队开发，做二次开发仍然是这样。同样，有很多宝贵的设计也是我们难得一见的，学习了此系统对开发企业级应用的也是很有帮助的。具体的架构介绍可以参考</span><span><a href="http://ugoer.cnblogs.com/archive/2005/09/02/228682.html" target=_blank>ugoer</a></span><span>的相关帖子。我会在以后尽量抽出时间对</span><span>CS</span><span>系统的其他相关技术做一些介绍。</span></p>
<img src ="http://www.cnblogs.com/Dragonpro/aggbug/383095.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41778/" target="_blank">[新闻]Windows 7 Server将被命名为Windows Server 2008 R2</a>]]></description></item><item><title>使用Enterprise Library DAAB架构灵活的数据提供层</title><link>http://www.cnblogs.com/Dragonpro/archive/2006/04/11/372696.html</link><dc:creator>Felix</dc:creator><author>Felix</author><pubDate>Tue, 11 Apr 2006 15:07:00 GMT</pubDate><guid>http://www.cnblogs.com/Dragonpro/archive/2006/04/11/372696.html</guid><wfw:comment>http://www.cnblogs.com/Dragonpro/comments/372696.html</wfw:comment><comments>http://www.cnblogs.com/Dragonpro/archive/2006/04/11/372696.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/Dragonpro/comments/commentRss/372696.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Dragonpro/services/trackbacks/372696.html</trackback:ping><description><![CDATA[摘要: 前段时间提到使用DAAB模块引用到自己的系统中遇到的困惑：http://dragonpro.cnblogs.com/archive/2005/10/20/258486.html<br>后来经过我的反复思索和试验，找到了一种折中的方式，既尽量减少了重复代码屏蔽了数据库的异构问题，又可以较合理体现分层体系。现在抽空把这个架构分享出来，给大家多多少少一点参考，也希望多批评指正。&nbsp;&nbsp;<a href='http://www.cnblogs.com/Dragonpro/archive/2006/04/11/372696.html'>阅读全文</a><img src ="http://www.cnblogs.com/Dragonpro/aggbug/372696.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41775/" target="_blank">[新闻]2008年8月19日IT博客精选</a>]]></description></item><item><title>异构数据库转换工具的结构说明</title><link>http://www.cnblogs.com/Dragonpro/archive/2006/04/09/370889.html</link><dc:creator>Felix</dc:creator><author>Felix</author><pubDate>Sun, 09 Apr 2006 15:32:00 GMT</pubDate><guid>http://www.cnblogs.com/Dragonpro/archive/2006/04/09/370889.html</guid><wfw:comment>http://www.cnblogs.com/Dragonpro/comments/370889.html</wfw:comment><comments>http://www.cnblogs.com/Dragonpro/archive/2006/04/09/370889.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/Dragonpro/comments/commentRss/370889.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Dragonpro/services/trackbacks/370889.html</trackback:ping><description><![CDATA[摘要: 前篇工具介绍：http://dragonpro.cnblogs.com/archive/2006/04/09/370415.html<br>此为结构说明篇，可能大部分朋友对这个小工具不会感兴趣，不过当我们做项目时如果有这方面的需要的话我希望还是能用此软件帮上点忙。&nbsp;&nbsp;<a href='http://www.cnblogs.com/Dragonpro/archive/2006/04/09/370889.html'>阅读全文</a><img src ="http://www.cnblogs.com/Dragonpro/aggbug/370889.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41774/" target="_blank">[新闻]Facebook成为美国四大电视台争夺观众阵地</a>]]></description></item><item><title>【全源码发布】异构数据库转换工具</title><link>http://www.cnblogs.com/Dragonpro/archive/2006/04/09/370415.html</link><dc:creator>Felix</dc:creator><author>Felix</author><pubDate>Sat, 08 Apr 2006 19:10:00 GMT</pubDate><guid>http://www.cnblogs.com/Dragonpro/archive/2006/04/09/370415.html</guid><wfw:comment>http://www.cnblogs.com/Dragonpro/comments/370415.html</wfw:comment><comments>http://www.cnblogs.com/Dragonpro/archive/2006/04/09/370415.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/Dragonpro/comments/commentRss/370415.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Dragonpro/services/trackbacks/370415.html</trackback:ping><description><![CDATA[摘要: 在我看来Oracle和SQLServer数据库之间如果要复制数据和结构，好像还是个麻烦事，当然肯定会有相似或更好的工具，但由于我天生懒惰不想去找，索性自己写了个工具，可以在SQLServer和Oracle之间进行任意组合的数据转换。目前这个工具建立在Microsoft Enterprise Library之上的，屏蔽了不同数据库之间的数据操作，使得在建立这个工具的时候只需要考虑业务问题，也算是DAAB模块的小小实例吧。&nbsp;&nbsp;<a href='http://www.cnblogs.com/Dragonpro/archive/2006/04/09/370415.html'>阅读全文</a><img src ="http://www.cnblogs.com/Dragonpro/aggbug/370415.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41774/" target="_blank">[新闻]Facebook成为美国四大电视台争夺观众阵地</a>]]></description></item><item><title>WEB2.0</title><link>http://www.cnblogs.com/Dragonpro/archive/2006/01/05/311176.html</link><dc:creator>Felix</dc:creator><author>Felix</author><pubDate>Wed, 04 Jan 2006 19:35:00 GMT</pubDate><guid>http://www.cnblogs.com/Dragonpro/archive/2006/01/05/311176.html</guid><wfw:comment>http://www.cnblogs.com/Dragonpro/comments/311176.html</wfw:comment><comments>http://www.cnblogs.com/Dragonpro/archive/2006/01/05/311176.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/Dragonpro/comments/commentRss/311176.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Dragonpro/services/trackbacks/311176.html</trackback:ping><description><![CDATA[<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这几天，看了很多WEB2.0的东东，早些时候我也了解了些这个概念，不过没引起足够重视，我仍然需要优化自己的思维。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这几天浏览过的印象深刻的WEB2.0应用服务：</P>
<P><A href="http://www.douban.com/" target=_blank>豆瓣</A>：典型应用，用户参与其中，所有内容都是由用户产生的。</P>
<P><A href="http://www.51.com/" target=_blank>51.COM</A>：由blog产生的附加价值，用在交友这方面实在是非常好的方向，我以前也想过用什么样的交友方式，其实这个就是很好的方式了，写好blog后自然很容易交到合适的朋友。<A href="http://pangshengdong.com/" target=_blank>庞升东</A>的确把握好了机会。</P>
<P><A href="http://www.flickr.com/" target=_blank>flickr.com</A>：本来早就看到过，今天才用了一下，果然功能非常贴心，用起来很爽。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我想Web2.0就是要给人一种这样的感觉，用起来很爽，不管是博客，还是其他服务，大家都来维护一个应用，互相促进，这就是WEB2.0带给我们的新体念。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我也以我片面的语言笼统的定义一下我对WEB2.0的认识。那就是巧妙的利用了大众的智慧，大众的主观能动性为网站提供资讯，同时也享受他人提供的资讯，网站程序的有机协调使这些资讯能最优的提供给用户，巧妙的达到双赢的效果。WEB2.0这个时代让人更加振奋。</P><img src ="http://www.cnblogs.com/Dragonpro/aggbug/311176.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41773/" target="_blank">[新闻]商业周刊：Twitter创收难 或被收购</a>]]></description></item><item><title>2006</title><link>http://www.cnblogs.com/Dragonpro/archive/2006/01/02/309956.html</link><dc:creator>Felix</dc:creator><author>Felix</author><pubDate>Mon, 02 Jan 2006 14:49:00 GMT</pubDate><guid>http://www.cnblogs.com/Dragonpro/archive/2006/01/02/309956.html</guid><wfw:comment>http://www.cnblogs.com/Dragonpro/comments/309956.html</wfw:comment><comments>http://www.cnblogs.com/Dragonpro/archive/2006/01/02/309956.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Dragonpro/comments/commentRss/309956.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Dragonpro/services/trackbacks/309956.html</trackback:ping><description><![CDATA[<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 很久没整理自己的空间了，<A href="http://spaces.msn.com/members/lf1981/Blog/cns!1p3N0excLVFPplWsGDETKTBA!219.entry" target=_blank>元旦</A>也不知道咋过的，我想这主要是最近经历使自己的心情变得很糟了，也使自己更慵懒了，也许这些经历是必须的吧，希望我的2006能彻底改变我的生活，健康的学习工作生活。</P><img src ="http://www.cnblogs.com/Dragonpro/aggbug/309956.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41772/" target="_blank">[新闻]奇虎360安全卫士负责人傅盛正式离职</a>]]></description></item><item><title>2005年度世界500强公司名单</title><link>http://www.cnblogs.com/Dragonpro/archive/2005/12/15/298122.html</link><dc:creator>Felix</dc:creator><author>Felix</author><pubDate>Thu, 15 Dec 2005 14:44:00 GMT</pubDate><guid>http://www.cnblogs.com/Dragonpro/archive/2005/12/15/298122.html</guid><wfw:comment>http://www.cnblogs.com/Dragonpro/comments/298122.html</wfw:comment><comments>http://www.cnblogs.com/Dragonpro/archive/2005/12/15/298122.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Dragonpro/comments/commentRss/298122.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Dragonpro/services/trackbacks/298122.html</trackback:ping><description><![CDATA[摘要: 排名公司标志中文常用名称总部所在地主要业务营业收入百万美元1沃尔玛美国一般商品零售287,989.02英国石油英国炼油285,059.03埃克森美孚美国炼油270,772.04皇家壳牌石油英国/荷兰炼油268,690.05通用汽车美国汽车193,517.06戴姆勒克莱斯勒美国汽车176,687.57丰田汽车日本汽车172,616.38福特汽车美国汽车172,233.09通用电气 美国多元化152,&nbsp;&nbsp;<a href='http://www.cnblogs.com/Dragonpro/archive/2005/12/15/298122.html'>阅读全文</a><img src ="http://www.cnblogs.com/Dragonpro/aggbug/298122.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41771/" target="_blank">[新闻]土豆网首页全新改版 用户将获得更高权限</a>]]></description></item></channel></rss>