﻿<?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>博客园-广州.NET俱乐部</title><link>http://GuangZhou.cnblogs.com</link><description>交流、分享</description><language>zh-cn</language><lastBuildDate>Thu, 24 Jul 2008 00:38:33 GMT</lastBuildDate><pubDate>Thu, 24 Jul 2008 00:38:33 GMT</pubDate><ttl>60</ttl><item><title>开源发布winform下的loading组件</title><link>http://www.cnblogs.com/henryfan/archive/2008/07/22/1249056.html</link><dc:creator>henry</dc:creator><author>henry</author><pubDate>Tue, 22 Jul 2008 14:03:00 GMT</pubDate><guid>http://www.cnblogs.com/henryfan/archive/2008/07/22/1249056.html</guid><description><![CDATA[<p>&nbsp;相信经常写winform的朋友应该碰到过这种问题，就是当处理很多东西的时候界面假死的现象。</p>
<p>这段时间在工作的时候也碰到这情况，于是封装成一个组件方便大家使用。</p>
<p>其实这次发布的组件并不只这些功能，是一个自己用的一个winform简单功能库，不过现有功能还是比较少。</p>
<p>组件采用<font face="Verdana">Apache License</font> 2.0协议。</p>
<p><img height="300" alt="" src="http://www.cnblogs.com/images/cnblogs_com/henryfan/loading.gif" width="345" border="0" /></p>
<p><a href="http://www.cnblogs.com/Files/henryfan/HFSoft.Component.Windows.rar">下载组件</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://GuangZhou.cnblogs.comaggbug/1249056.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41265/" target="_blank">[新闻]Google在线百科工具Knol今日正式上线</a>]]></description></item><item><title>NiuDown视频下载器 1.0</title><link>http://www.cnblogs.com/winlmh/archive/2008/07/22/1248902.html</link><dc:creator>不戒大师</dc:creator><author>不戒大师</author><pubDate>Tue, 22 Jul 2008 09:32:00 GMT</pubDate><guid>http://www.cnblogs.com/winlmh/archive/2008/07/22/1248902.html</guid><description><![CDATA[<P><FONT color=#a52a2a><IMG src="http://images.cnblogs.com/cnblogs_com/winlmh/143946/r_123.JPG"><BR><BR>NiuDown视频下载器 1.0</FONT><BR>FLV视频的不断完善，在线视频网站的不断发展，使得在线观看FLV视频成了很多人网络生活的一部分。<BR>NiuDown视频下载器，直接下载视频，支持众多视频网站。<BR>目前支持的视频网站<BR>&nbsp;&nbsp;&nbsp; 土豆网 - tudou.com<BR>&nbsp;&nbsp;&nbsp; 优酷网 - youku.com<BR>&nbsp;&nbsp;&nbsp; 酷6网 - ku6.com<BR>&nbsp;&nbsp;&nbsp; 六间房 - 6.cn <BR>&nbsp;&nbsp;&nbsp; 新浪宽频 - video.sina.com.cn<BR>&nbsp;&nbsp;&nbsp; QQ宽频&nbsp; - qq.com<BR>&nbsp;&nbsp;&nbsp; YouTube - YouTube.com</P>
<P>使用方法很简单。</P>
<P>2007-7-16 更新<BR>&nbsp; * 添加列表任务删除功能<BR>&nbsp; * 添加任务下载完成后关机<BR>&nbsp; * 修正标题含有特别字符无法下载<BR><BR>2007-7-22 更新<BR>&nbsp;&nbsp;&nbsp;* 添加５６视频下载的支持<BR>&nbsp;&nbsp;&nbsp;* 修正列表任务删除的溢出<BR><BR><A href="http://files.cnblogs.com/winlmh/NiuDown视频下载器.rar">NiuDown视频下载器 V1.0 下载</A></P><img src ="http://GuangZhou.cnblogs.comaggbug/1248902.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41264/" target="_blank">[新闻]马云致信阿里巴巴全体员工号召准备过冬</a>]]></description></item><item><title>KDB+性能分析：内存篇</title><link>http://www.cnblogs.com/yyw84/archive/2008/07/20/1247212.html</link><dc:creator>阿武</dc:creator><author>阿武</author><pubDate>Sun, 20 Jul 2008 14:50:00 GMT</pubDate><guid>http://www.cnblogs.com/yyw84/archive/2008/07/20/1247212.html</guid><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 经过一个多星期的折腾终于搞定房子的事了，租到了一个还比较不错的单间，长这么大终于有一个属于自己的空间了，在这之前还在朋友那里寄宿了一个星期，也是长这么大第一次感觉到了&#8220;无家可归&#8221;的酸楚，每天下班后都不想回去，只是到处乱转，没有目的，转到时间差不多了就去吃饭然后回去那个不属于我的地方，当然还是特别感谢我的朋友的，幸亏有他们，要不这一星期都不知道要在哪座天桥下安家了。也是因为这样子，<strong>Q语言初学者系列</strong>暂时被耽搁了，虽然关心它的朋友并不多，但我还是想继续完成它，既然开始了，就总要有个结局。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 扯了一些题外话，下面开始进入今天的内容，KDB数据库相对于其它关系型数据库最大的优点就是效率高，特别是对于那些基于列的数据的运算表现更加出色，但它也并不是十全十美的，例如它是一个基于内存的数据库，这也就是说它的效率很大的一个原因就是依赖于数据在内存中的高速传输，这可比硬盘要快得多了。今天我就对它的内存占用率做了一个测试，使用的是开发版本，也就是32位版本，而且运行时间只能是2小时，所以这也是这个测试最多能完成的时间，当前使用的测试是每插入1000行做一次内存使用情况跟所消耗时间的记录，最终结果如下：&nbsp;</p>
<p><a title="点击查看大图" href="http://www.cnblogs.com/images/cnblogs_com/yyw84/200807/KdbTest.png" target="_blank"><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/yyw84/200807/KdbTest_small.png" border="0" width="720" height="421" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 图中的<span style="color: #0000ff;">蓝线</span>代表的是数据库所占用的内存，<span style="color: #ff0000;">红线</span>代表的是数据库真正使用的内存，<span style="color: #00ff00;">绿线</span>表示每插入1000条数据所需要的时间。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 测试所使用的数据如下：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; <img alt="" src="http://www.cnblogs.com/images/cnblogs_com/yyw84/200807/kdb_data.jpg" border="0" width="677" height="440" /></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从测试结果中我们可以看到数据库启动后会事先向操作系统申请60多M的内存，虽然这么多很多都是被闲置着的，但这么做的好处是当往里面添加数据的时候程序不需要再向操作系统申请内存，这节约了时间。测试发现只要数据量在50万行左右内存基本不会有增加，但如果还有新的数据添加进来，数据库又会一次性申请大量的内存，再接下去还是这样的操作，当数据达到350万行的时候，内存占用情况是400M左右。我想这还是一个可以接受的范围<img alt="" src="http://www.cnblogs.com/Emoticons/QQ/23.gif" />。再看下面的绿线，随着表中数据的不断增加，添加一行记录所需要的时间也在平滑地增长，这可不是什么好消息，不知道关系型数据库是不是也是这样的情况，这个还没有测试过。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 测试所使用的程序：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、KDB+数据库，测试所使用的是最新版本2.4；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、<a href="http://www.cnblogs.com/Files/yyw84/200807/KdbTester.rar">KdbTester</a>&nbsp;开发语言为C#，用于产生测试数据；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、<a href="http://www.cnblogs.com/Files/yyw84/200807/KdbTestReporter.rar">KdbTestReporter</a>&nbsp;开发语言为JAVA，使用JFreeChart开源组件来生成报表。</p>
<p>&nbsp;</p>
<p>另外&nbsp;</p>
<p>测试机器的配置如下：<font face="Courier New"><br />
====================================<br />
</font><span id="favoriteDescription"><font face="Courier New">CPU:&nbsp;&nbsp;&nbsp; Intel Core 2 Duo E4300<br />
主板:&nbsp;&nbsp; 升技 AB9<br />
内存: 金士顿 DDR2 667 1G x2<br />
显卡:&nbsp;&nbsp; 影驰 GeForce 8600GT 魔灵<br />
硬盘:&nbsp;&nbsp; 酷鱼7200.10 SATAII 8M 250G<br />
电源: Tt 金刚450(W3009)<br />
机箱:&nbsp;&nbsp; 航嘉 H001</font></span></p>
<p><font face="Courier New"></font>&nbsp;</p>
<p><font face="Courier New">操作系统是Vista sp1</font></p>
<p><font face="Courier New"></font>&nbsp;</p>
<p><font face="Courier New">为了不让等待的时间太过于无聊，所以自始自终机器都是边跑测试边放电影<img alt="" src="http://www.cnblogs.com/Emoticons/QQ/sweatingbullets.gif" />。</font></p>
<p><font face="Courier New"></font>&nbsp;</p><img src ="http://GuangZhou.cnblogs.comaggbug/1247212.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41263/" target="_blank">[新闻]comScore 公布 6 月美国 TOP10 社会化网络排名</a>]]></description></item><item><title>扣出MSLinqToSQLGenerator的基类，可用于开发自定义工具(custom tool)</title><link>http://www.cnblogs.com/ofei/archive/2008/07/19/1246486.html</link><dc:creator>分享 共赢</dc:creator><author>分享 共赢</author><pubDate>Sat, 19 Jul 2008 02:27:00 GMT</pubDate><guid>http://www.cnblogs.com/ofei/archive/2008/07/19/1246486.html</guid><description><![CDATA[摘要: 扣出MSLinqToSQLGenerator的基类，可用于开发自定义工具(custom tool)&nbsp;&nbsp;<a href='http://www.cnblogs.com/ofei/archive/2008/07/19/1246486.html'>阅读全文</a><img src ="http://GuangZhou.cnblogs.comaggbug/1246486.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41262/" target="_blank">[新闻]万众期待 iPhone 3G 16GB上市两天破万</a>]]></description></item><item><title>WebPart全接触1（如何管理自己的WebPart个性化数据）</title><link>http://www.cnblogs.com/Aldebaran/archive/2008/07/18/1246232.html</link><dc:creator>Aldebaran's Home</dc:creator><author>Aldebaran's Home</author><pubDate>Fri, 18 Jul 2008 09:25:00 GMT</pubDate><guid>http://www.cnblogs.com/Aldebaran/archive/2008/07/18/1246232.html</guid><description><![CDATA[<P>是不是觉得WebPart存储在asp.net自带的数据库中觉得很不保险？每次做一个带WebPart的项目都必须让asp.net部署一个aspnetdb数据库，好像WebPart的数据并不能完全融入自己的系统体系中。</P>
<P>本文将介绍如何从Asp.net中获取WebPart个性化数据，如何存储这些数据。</P>
<P>1 在Asp.Net2.0中，是如何存取WebPart数据的？</P>
<P>在Asp.Net2.0中，默认是通过<B>SqlPersonalizationProvider</B>类存取数据的，提到<B>SqlPersonalizationProvider</B>，就不得不提他的父类<STRONG>PersonalizationProvider，PersonalizationProvider</STRONG>提供了个性化数据的一些抽象方法，来存储和读取WebPart的个性化数据，我们当然也可以建造一个 <STRONG>MyPersonalizationProvider</STRONG>来存取我们自己的个性化数据.</P>
<P>在此着重介绍</P>
<UL>
<LI><B>SavePersonalizationBlob()</B></LI></UL>
<P><FONT color=#008000>//<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 摘要:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; 将原始个性化设置数据保存到基础 Microsoft SQL Server 数据库中。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 参数:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; webPartManager:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; 管理个性化设置数据的 System.Web.UI.WebControls.WebParts.WebPartManager。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; userName:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; System.Web.UI.WebControls.WebParts.PersonalizationScope.User 范围中要用作关键字的个性化设置信息的用户名。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; dataBlob:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; 要保存的数据的字节数组。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; path:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; 指示要保存的个性化设置信息的 System.Web.UI.WebControls.WebParts.PersonalizationScope。此值不能为null。</FONT></P><PRE>protected <FONT color=#0080ff>abstract void</FONT> <B>SavePersonalizationBlob</B>(<FONT color=#0080ff>WebPartManager</FONT> webPartManager, <FONT color=#0080ff>string</FONT> path, <FONT color=#0080ff>string</FONT> userName, <FONT color=#0080ff>byte</FONT>[] dataBlob);</PRE><PRE>参数webPartManager就是你的页面上的放的webPartManager</PRE><PRE>参数path指的是你的WebPart部署在哪个页面上，在Index.aspx上还是Default.aspx上</PRE><PRE>参数userName，如果你使用了MemberShip,则返回你的UserName.</PRE><PRE>参数dataBlob，就是WebPart个性化数据，你可以存储在任意的Image字段中</PRE><PRE>如果您有一个这样的数据结构：</PRE>
<TABLE cellSpacing=0 cellPadding=2 width=400 border=1>
<TBODY>
<TR>
<TD vAlign=top width=94>Id</TD>
<TD vAlign=top width=101>Page</TD>
<TD vAlign=top width=113>UserId</TD>
<TD vAlign=top width=90>dataBlob</TD></TR>
<TR>
<TD vAlign=top width=94>0</TD>
<TD vAlign=top width=108>Index.aspx</TD>
<TD vAlign=top width=121>A01</TD>
<TD vAlign=top width=109>********</TD></TR>
<TR>
<TD vAlign=top width=94>1</TD>
<TD vAlign=top width=108>default.aspx</TD>
<TD vAlign=top width=121>A02</TD>
<TD vAlign=top width=109>********</TD></TR></TBODY></TABLE>
<P>&nbsp;</P>
<P>您就可以将WebPart数据掌握在自己手中了。</P>
<P>我们可以参考一下<STRONG>SqlPersonalizationProvider</STRONG>中是如何存储的</P>
<DIV class=cnblogs_code><IMG id=Code_Closed_Image_171947 onclick="this.style.display='none'; Code_Closed_Text_171947.style.display='none'; Code_Open_Image_171947.style.display='inline'; Code_Open_Text_171947.style.display='inline';" height=16 src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><IMG id=Code_Open_Image_171947 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_171947.style.display='none'; Code_Closed_Image_171947.style.display='inline'; Code_Closed_Text_171947.style.display='inline';" height=16 src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><SPAN id=Code_Closed_Text_171947 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">SavePersonalizationBlob</SPAN><SPAN id=Code_Open_Text_171947 style="DISPLAY: none"><BR><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;SavePersonalizationState(SqlConnection&nbsp;connection,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;path,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;userName,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">byte</SPAN><SPAN style="COLOR: #000000">[]&nbsp;state)<BR><IMG id=Codehighlighter1_108_997_Open_Image onclick="this.style.display='none'; document.getElementById('Codehighlighter1_108_997_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_108_997_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_108_997_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_108_997_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_108_997_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_108_997_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_108_997_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_108_997_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_108_997_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;SqlCommand&nbsp;command;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(userName&nbsp;</SPAN><SPAN style="COLOR: #000000">!=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">)<BR><IMG id=Codehighlighter1_164_270_Open_Image onclick="this.style.display='none'; document.getElementById('Codehighlighter1_164_270_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_164_270_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_164_270_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_164_270_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_164_270_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_164_270_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_164_270_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_164_270_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_164_270_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;SqlCommand(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">dbo.aspnet_PersonalizationPerUser_SetPageSettings</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;connection);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">else</SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_284_391_Open_Image onclick="this.style.display='none'; document.getElementById('Codehighlighter1_284_391_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_284_391_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_284_391_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_284_391_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_284_391_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_284_391_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_284_391_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_284_391_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_284_391_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;SqlCommand(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">dbo.aspnet_PersonalizationAllUsers_SetPageSettings</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;connection);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.SetCommandTypeAndTimeout(command);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;command.Parameters.Add(</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.CreateParameter(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">@ApplicationName</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;SqlDbType.NVarChar,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.ApplicationName));<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;command.Parameters.Add(</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.CreateParameter(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">@Path</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;SqlDbType.NVarChar,&nbsp;path));<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;command.Parameters.Add(</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.CreateParameter(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">@PageSettings</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;SqlDbType.Image,&nbsp;state));<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;command.Parameters.Add(</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.CreateParameter(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">@CurrentTimeUtc</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;SqlDbType.DateTime,&nbsp;DateTime.UtcNow));<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(userName&nbsp;</SPAN><SPAN style="COLOR: #000000">!=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">)<BR><IMG id=Codehighlighter1_860_964_Open_Image onclick="this.style.display='none'; document.getElementById('Codehighlighter1_860_964_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_860_964_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_860_964_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_860_964_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_860_964_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_860_964_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_860_964_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_860_964_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_860_964_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command.Parameters.Add(</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.CreateParameter(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">@UserName</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;SqlDbType.NVarChar,&nbsp;userName));<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;command.ExecuteNonQuery();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></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></SPAN></SPAN></DIV>
<P>&nbsp;</P>
<UL>
<LI><B>LoadPersonalizationBlobs()</B></LI></UL>
<P><FONT color=#008000>//<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 摘要:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; 根据指定参数从基础数据存储区加载个性化设置数据。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 参数:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; sharedDataBlob:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; 为 System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared 范围返回的数据。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; webPartManager:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; 管理个性化设置数据的 System.Web.UI.WebControls.WebParts.WebPartManager。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; userName:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; System.Web.UI.WebControls.WebParts.PersonalizationScope.User 范围中要用作检索关键字的个性化设置信息的用户名。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; userDataBlob:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; 为 System.Web.UI.WebControls.WebParts.PersonalizationScope.User 范围返回的数据。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; path:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared 范围中要用作检索关键字的个性化设置信息的路径。</FONT></P><PRE>protected <FONT color=#0080ff>abstract void</FONT> <B>LoadPersonalizationBlobs</B>(<FONT color=#0080ff>WebPartManager</FONT> webPartManager, <FONT color=#0080ff>string</FONT> path, <FONT color=#0080ff>string</FONT> userName, ref <FONT color=#0080ff>byte</FONT>[] sharedDataBlob, ref <FONT color=#0080ff>byte</FONT>[] userDataBlob);</PRE><PRE>前几个参数就不一一介绍了，它们和<STRONG>SavePersonalizationBlob()</STRONG>中使用的参数并无二致。只是个性化参数分了sharedDataBlob和userDataBlob。</PRE><PRE>如果某个WebPartManager中设置Personalization-InitialScope指定为User的，则属性的值存储在userDataBlob中；如果指定为Shared，则存储在sharedDataBlob。</PRE><PRE>或者是设置某个个性化属性</PRE>
<P>[ResourceWebDisplayName(""), Personalizable(PersonalizationScope.Shared)]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public long MyProperty<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get { <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return _myProperty; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set { _myProperty= value; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR><PRE>我们也参考一下<STRONG>SqlPersonalizationProvider是如何读取的。<DIV class=cnblogs_code><IMG id=Code_Closed_Image_172212 onclick="this.style.display='none'; Code_Closed_Text_172212.style.display='none'; Code_Open_Image_172212.style.display='inline'; Code_Open_Text_172212.style.display='inline';" height=16 src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><IMG id=Code_Open_Image_172212 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_172212.style.display='none'; Code_Closed_Image_172212.style.display='inline'; Code_Closed_Text_172212.style.display='inline';" height=16 src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><SPAN id=Code_Closed_Text_172212 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">LoadPersonalizationBlobs</SPAN><SPAN id=Code_Open_Text_172212 style="DISPLAY: none"><BR><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">protected</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">override</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;LoadPersonalizationBlobs(WebPartManager&nbsp;webPartManager,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;path,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;userName,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">ref</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">byte</SPAN><SPAN style="COLOR: #000000">[]&nbsp;sharedDataBlob,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">ref</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">byte</SPAN><SPAN style="COLOR: #000000">[]&nbsp;userDataBlob)<BR><IMG id=Codehighlighter1_162_992_Open_Image onclick="this.style.display='none'; document.getElementById('Codehighlighter1_162_992_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_162_992_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_162_992_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_162_992_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_162_992_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_162_992_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_162_992_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_162_992_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_162_992_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;sharedDataBlob&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;userDataBlob&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;SqlConnectionHolder&nbsp;connectionHolder&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;SqlConnection&nbsp;connection&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_314_953_Open_Image onclick="this.style.display='none'; document.getElementById('Codehighlighter1_314_953_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_314_953_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_314_953_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_314_953_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_314_953_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_314_953_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_314_953_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_314_953_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_314_953_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_336_758_Open_Image onclick="this.style.display='none'; document.getElementById('Codehighlighter1_336_758_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_336_758_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_336_758_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_336_758_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_336_758_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_336_758_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_336_758_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_336_758_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_336_758_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connectionHolder&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.GetConnectionHolder();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connection&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;connectionHolder.Connection;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.CheckSchemaVersion(connection);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sharedDataBlob&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.LoadPersonalizationBlob(connection,&nbsp;path,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(</SPAN><SPAN style="COLOR: #000000">!</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">.IsNullOrEmpty(userName))<BR><IMG id=Codehighlighter1_644_748_Open_Image onclick="this.style.display='none'; document.getElementById('Codehighlighter1_644_748_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_644_748_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_644_748_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_644_748_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_644_748_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_644_748_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_644_748_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_644_748_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_644_748_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userDataBlob&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.LoadPersonalizationBlob(connection,&nbsp;path,&nbsp;userName);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">finally</SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_783_947_Open_Image onclick="this.style.display='none'; document.getElementById('Codehighlighter1_783_947_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_783_947_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_783_947_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_783_947_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_783_947_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_783_947_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_783_947_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_783_947_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_783_947_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(connectionHolder&nbsp;</SPAN><SPAN style="COLOR: #000000">!=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">)<BR><IMG id=Codehighlighter1_839_937_Open_Image onclick="this.style.display='none'; document.getElementById('Codehighlighter1_839_937_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_839_937_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_839_937_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_839_937_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_839_937_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_839_937_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_839_937_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_839_937_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_839_937_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connectionHolder.Close();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connectionHolder&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">catch</SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_968_990_Open_Image onclick="this.style.display='none'; document.getElementById('Codehighlighter1_968_990_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_968_990_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_968_990_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_968_990_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_968_990_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_968_990_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_968_990_Open_Text').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_968_990_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_968_990_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">throw</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></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></SPAN></SPAN></DIV><BR><BR><BR><BR></STRONG><BR>2 我们写好了<STRONG>MyPersonalizationProvider，</STRONG>怎么将它应用到我们的系统中呢？</PRE><PRE>很简单，只要在Web.config中的&lt;System.web&gt;节中指定</PRE>
<P>&lt;webParts&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;personalization defaultProvider="<STRONG>MyPersonalizationProvider</STRONG>"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;providers&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;clear/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;add name="<STRONG>MyPersonalizationProvider</STRONG>" type="<STRONG>MyCompany</STRONG>.<STRONG>MyPersonalizationProvider</STRONG>" connectionStringName="Default"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/providers&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/personalization&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/webParts&gt;<PRE></PRE><FONT face="Courier New"></FONT><PRE>&nbsp;至此，您就可以完全抛弃aspnetdb数据库了，再建立任何的webpart应用都不需要跑一次aspnet_regsql.exe来初始化<BR>aspnetdb数据库</PRE><img src ="http://GuangZhou.cnblogs.comaggbug/1246232.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41261/" target="_blank">[新闻]张宝全正式声明中国版HD-DVD涉嫌盗用EVD技术</a>]]></description></item><item><title>请大家投票哦,最后一天,支持我家宝宝</title><link>http://www.cnblogs.com/cancanwyq/archive/2008/07/17/1245547.html</link><dc:creator>苏康胜</dc:creator><author>苏康胜</author><pubDate>Thu, 17 Jul 2008 14:55:00 GMT</pubDate><guid>http://www.cnblogs.com/cancanwyq/archive/2008/07/17/1245547.html</guid><description><![CDATA[<strong style="font-size: 14pt">第164号宝宝就是我家乐乐,请大家投上宝贵的一票(每个电脑每天可以投一票), 不需要任何注册,选中164号&nbsp; 按确定即可,先谢谢了<br />
&nbsp;<br />
<font face="Verdana">投票地址&nbsp;<font face="Verdana"><a href="http://szbbs.soufun.com/zt/200807/cjbbds.html">http://szbbs.soufun.com/zt/200807/cjbbds.html</a><br />
</font></font></strong><br />
<a href="http://www.soufun.com/Album/PictureDetail_20963809_200_21727855.htm" target="_blank"><img style="width: 381px; height: 254px" height="254" alt="按此在新窗口浏览图片" src="http://img1.soufun.com/bbs/2008_07/12/sz/1215874410250_000.jpg" width="381" border="0" minmax_bound="true" /></a>&nbsp;<a id="Detail" title="点击查看下一张: IMG_4297" href="http://soufun.com/Album/PictureDetail_20963809_200_21727853.htm" name="Detail"><img id="Picture" style="width: 371px; height: 248px" height="248" alt="点击查看下一张: IMG_4297" src="http://img1.soufun.com/bbs/2008_07/12/sz/1215874358639_000.jpg" width="371" onload="Image.Resize(this,545);" border="0" /></a> 
<img src ="http://GuangZhou.cnblogs.comaggbug/1245547.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41259/" target="_blank">[新闻]百度TV：高效率的“奥运事件眼球捕手”</a>]]></description></item><item><title>ASP.NET MVC Preview版 跟进...</title><link>http://www.cnblogs.com/ccsonline/archive/2008/07/17/1245086.html</link><dc:creator>ccs</dc:creator><author>ccs</author><pubDate>Thu, 17 Jul 2008 04:01:00 GMT</pubDate><guid>http://www.cnblogs.com/ccsonline/archive/2008/07/17/1245086.html</guid><description><![CDATA[<p>ASP.NET MVC开发团队正处于完成崭新的&#8220;第四个预览版&#8221;的最后阶段，他们希望在本周稍后发布这个版本。<a href="http://blog.joycode.com/scottgu/archive/2008/05/28/115127.aspx" target="_blank">第三个预览版</a>着重于完善ASP.NET MVC中的许多底层的核心API和扩展点。从本周的第四个预览版开始，你将看到越来越多的建立于这些核心基础之上的，增加生产力的高层特性开始出现。</p>
<p>这个新的版本里有一堆新特性和功能，实际上其数目之多，我决定我需要2个帖子才能对它们全部论及，这第一个贴子将讨论第四个预览版中的缓存（Caching）,错误处理（Error Handling）和安全（Security）新特性，以及一些测试方面的改进，我下一个贴子将讨论这个版本中新加的AJAX特性。 </p>
<h3><u>理解过滤拦截器（Filter Interceptors）</u></h3>
<p>Action过滤器属性（Filter Attributes）是ASP.NET MVC中一个非常有用的扩展功能，这个东西最初是在第二个预览版中加入的，允许你在对MVC控制器的请求中注入拦截代码，在 Controller和它的Action方法执行的前后执行，这可以促成一些非常棒的封装场景，在其中，你能以一种非常干净的，声明的方式轻松地封装和重用功能。</p>
<p>下面是一个极其简单的例子，ScottGuLog过滤器，我可以用它来记录在请求的执行过程中抛出的异常的细节。实现一个定制的过滤器类非常容易，只要继承自ActionFilterAttribute类型，覆盖其中的适当方法，在Controller的Action方法调用之前或之后，或者在ActionResult处理进回复之前或之后运行代码。</p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step1.png" /> </p>
<p>在ASP.NET MVC Controller中使用过滤器也是非常容易的，只要在Action方法上将其声明为一个属性，或者在Controller类本身之上声明即可（在这个情形下，它将运用于Controller中所有的Action方法）： </p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step2.png" /> </p>
<p>在上面，你可以看到应用了的2个过滤器的例子，我表示要将&#8220;ScottGuLog&#8221;运用于&#8220;About&#8221;这个Action方法，而将&#8220;HandleError&#8221;过滤器运用于HomeController的所有Action方法之上。 </p>
<p>&nbsp;</p>
<p>ASP.NET MVC的以前几个预览版本早就开启了这个过滤器扩展性，但并没有发布预制的过滤器，这第四个版本包含了几个有用的过滤器，可以用来处理输出缓存，错误处理以及安全的场景。 </p>
<h3><u>OutputCache过滤器</u></h3>
<p>[OutputCache]过滤器提供了一个简易的方式，将ASP.NET MVC与ASP.NET的输出缓存功能相结合（在ASP.NET MVC第三个预览版中，你要编写代码才能实现这个功能）。</p>
<p>想试验一下的话，修改HomeController（是由VS ASP.NET MVC项目模板生成的）中的Index Action方法的Message值来显示当前时间：</p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step3.png" /> </p>
<p>在运行这个应用时，每次刷新页面，你都会看到时间戳更新： </p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step4.png" /> </p>
<p>我们可以在我们的Action方法上加[OutputCache]属性来给这个URL启用输出缓存，我们将使用下面的声明来配置缓存回复10秒钟：</p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step5.png" /> </p>
<p>现在，当你点击刷新时，你会看到时间戳每10秒钟才更新一次。这是因为action方法每10秒钟才会被调用一次，其他时间的所有请求都是从ASP.NET输出缓存中供应的（意味着不用运行什么代码，所以请求的回复超快）。</p>
<p>除了支持时间间隔外，OutputCache属性还支持标准的 ASP.NET 输出缓存变化选项（随参数，头内容，内容编码以及定制逻辑而变化）。例如，下面的例子会根据PageIndex查询字符串参数的值保存不同的页面缓存版本，然后会根据进来的URL的查询字符串值自动显示正确的版本：</p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step6.png" /> </p>
<p>你还可以结合ASP.NET的数据库缓存失效功能，该功能允许你在URL依赖的数据库被修改后自动导致缓存失效（小技巧：实现这个功能的最佳方案是在你的web.config中配置一个CacheProfile节，然后在OutputCache属性中配置指向该节点）。</p>
<h3><u>HandleError过滤器</u></h3>
<p>[HandleError]过滤器提供了一种声明的方式，来在一个Controller或一个Action方法上表示，如果在处理一个ASP.NET MVC请求中发生错误的话，应该显示一个友好的错误回复。 </p>
<p>要试验一下的话，在项目中加一个新的TestController，实现一个action方法，在其中象下面这样抛出一个异常：</p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step7.png" /> </p>
<p>在默认情形下，如果将浏览器指向这个URL的话，它会给远程用户显示一个默认的ASP.NET错误网页（除非你去web.config文件中配置了&lt;customErrors&gt;节）： </p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step26.png" /> </p>
<p>我们可以在我们的Controller类或其中的Action方法上加一个[HandleError]属性，来改变要显示的HTML错误，而显示对终端用户比较友好的信息：</p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step9.png" /> </p>
<p>HandleError过滤器会捕捉住所有的异常（包括处理视图模板时抛出的错误），在出错时显示一个定制的Error视图回复。在默认情形下，它试图在你的项目中寻找一个名为&#8220;Error&#8221;的视图模板来生成回复。你可以将&#8220;Error&#8221;视图置于同个Controller相应的视图的目录之中（例如，上面的TestController的\Views\Test目录），也可以置于\Views\Shared文件夹中（系统会先找一个特定于控制器的出错视图，如果没找到的话，会在Shared文件夹中寻找，该文件夹包含了为所有控制器所共享的视图）。 </p>
<p>从第四个预览版开始，在你创建新的ASP.NET MVC项目时，Visual Studio现在会自动为你在\Views\Shared文件夹中加一个默认的&#8220;Error&#8221;视图模板：</p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step11.png" /> </p>
<p>在我们的TestController类上加[HandleError]属性后，在默认情形下，它会给远程用户显示一个象下面这样的HTML错误页面（注意，它使用了项目的母板页，这样就将错误信息集成进了站点之中）。很明显地，你可以去定制这个Error视图模板，显示你想要的任何HTML或者更加友好的错误信息，下面只不过是随该版本而来的原装的信息：</p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step12.png" /> </p>
<p>为帮助开发人员，在本地浏览应用时，Visual Studio中由新的项目模板提供的默认的Error视图模板还会显示额外的错误堆栈跟踪信息：</p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step13.png" /> </p>
<p>你可以在Error视图模板中将代码删除来将其关闭，或者也可以在你的web.config文件中将&lt;customErrors&gt;设成&#8220;Off&#8221;。 </p>
<p>在默认情形下，[HandleError]过滤器将捕捉和处理请求中抛出的所有异常。你也可以在[HandleError]属性上指定 "ExceptionType"和"View"属性来指定你感兴趣的特定异常类型，以及指定定制的错误视图：</p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step15.png" /> </p>
<p>在上面的代码中，我选择为SqlException和NullReferenceException异常显示定制的错误视图，所有其它的异常则将使用默认的&#8220;Error&#8221;视图模板。</p>
<h3><u>Authorize过滤器</u></h3>
<p>[Authorize]过滤器提供了一种声明的方式来控制对Controller或Action方法的访问权限，它允许你表示用户必须已经登录，或者要求他们必须是某个特定的用户或是某个特定的安全角色才能访问。这个过滤器可以用于任何类型的认证方式（包括基于Windows以及Forms的认证），还提供了自动将匿名用户转向到登录页面的支持。</p>
<p>要试验一下的话，在Visual Studio中给默认生成的HomeController中的&#8220;About&#8221; action方法加一个[Authorize]过滤器： </p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step16.png" /> </p>
<p>象上面这样声明[Authorize]属性表示用户必须已经登录进网站才能请求&#8220;About&#8221; action。如果还没登录的用户试图访问/Home/About URL的话，他们会无法访问该页。如果web应用是配置成使用基于Windows的认证的话，ASP.NET会自动使用他们的Windows登录身份来认证用户，如果成功的话，就会允许他们访问。如果web应用是配置成使用基于Forms的认证的话，[Authorize]会自动地将用户转向到登录页面以作认证（之后他们就能访问了）：</p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step17.png" /> </p>
<p>[Authorize]属性也允许你将访问权限只授予特定的用户或角色。例如，如果我要将"About" action的访问权限只限于我自己和Bill Gates的话，我可以这么写：</p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step18.png" /> </p>
<p>一般来说，除了无关紧要的应用外，你不该在代码中硬写用户名字，一般地，你应该使用象&#8220;角色&#8221;这样的比较高层次的概念来定义权限，然后另外将用户映射到角色上（例如，使用活动目录或数据库来储存这些映射）。[Authorize]属性通过使用&#8220;Roles&#8221;属性，极大地方便了对Controllers和Actions的访问的控制：</p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step19.png" /> </p>
<p>[Authorize]属性<u>并不</u>依赖于任何特定的用户身份或角色管理机制，它只用ASP.NET的"User"对象，该对象是可扩展的，允许使用任何身份系统。 </p>
<h3><u>AccountController类</u></h3>
<p>我在上面提到了[Authorize]属性可用于任何认证或用户身份管理系统，你可以编写或使用你想要的任何定制的登录UI或用户/密码管理系统。</p>
<p>但为助你起步，Visual Studio中的ASP.NET MVC项目模板现在包含了一个预制的&#8220;AccountController&#8221;类以及相关的登录视图，它们实现了表单认证成员系统，支持登录，退出，注册新用户，改变密码等。所有的视图模板和UI都可以轻松地定制，是独立于 AccountController 类或实现的： </p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step20.png" /> </p>
<p>Site.master模板在右上角也包括了UI，提供登录/退出功能，在使用基于表单的认证时，如果你目前还没认证的话，它会提示你登录：</p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step21.png" /> </p>
<p>在你通过认证后，它会显示一个欢迎信息，以及一个退出链接：</p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step22.png" /> </p>
<p>点击上面的Login链接，会将用户转到象下面这样的登录屏幕来做认证： </p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step23.png" /> </p>
<p>新用户可以点击注册链接来创建新的帐号：</p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step24.png" /> </p>
<p>错误处理和错误信息显示也是内置的： </p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvcpreview4/step25.png" /> </p>
<p>加到新项目中的AccountController类使用了内置的ASP.NET Membership API来存储和管理用户凭证（Membership系统使用了提供器API，允许接入任何后台存储，ASP.NET包含了内置的Active Directory 和 SQL Server提供器）。如果你不想使用内置的Membership系统的话，你可以保留同样的AccountController action方法签名，视图模板，Forms认证ticket逻辑，只要替换掉AccountController类中的用户帐号逻辑就可以了。在下一个ASP.NET MVC预览版中，我们计划将AccountController和用户身份系统间的交互逻辑封装成一个接口，这将进一步方便你接入你自己的用户存储系统（而不必实现一个完整的membership提供器），以及方便你对它和AccountController进行单元测试。</p>
<p>我们的希望是，这给大家提供了一个很好的快速起步的方式，允许大家在创建一个新项目后，就有一个工作的end to end的安全系统。</p>
<h3><u>测试TempData</u></h3>
<p>在这第四个预览版的第一个贴子里要提到的最后一个改进是对Controller类所做的一些改进，这些改进将允许你更轻松地单元测试TempData集合，TempData 属性允许你保存你要持久到将来一个用户请求的数据，它的意义在于，只持续到下一个请求为止（之后就被去除了）。一般用于这样的MVC场景： 你想要进行一个客户端的重新定向来改变浏览器中的URL，然后想要一种简便的方式来保存临时的数据。</p>
<p>在以前的ASP.NET MVC预览版中，你需要mock对象才能测试TempData集合。在第四个预览版中，你不再需要mock或设置什么了，你现在可以在单元测试中，直接在Controller的TempData集合中添加和核实对象（例如，在调用控制器的一个action方法之前填充它的TempData属性，或者在action方法返回后核实action方法更新了TempData）。TempData集合的实际存储机制现在封装在单独的TempDataProvider属性中了。 </p>
<h3><u>结论</u></h3>
<p>希望上面的贴子内容对即将发布的ASP.NET MVC的第四个预览版中的若干新特性和变动提供了一个简单的介绍，下一个贴子将讨论新加的 AJAX 功能，并且示范如何利用它。 </p>
<p>希望本文对你有所帮助，</p>
<p>Scott</p>
<div class="postfoot">&nbsp;</div>
<img src ="http://GuangZhou.cnblogs.comaggbug/1245086.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41260/" target="_blank">[新闻]谷歌启动强大引擎 ８月起全球营销成都</a>]]></description></item><item><title>.Net混淆研究（二）---主流工具的比较分析</title><link>http://www.cnblogs.com/huangzhenwu/archive/2008/07/16/1244348.html</link><dc:creator>kevin</dc:creator><author>kevin</author><pubDate>Wed, 16 Jul 2008 06:43:00 GMT</pubDate><guid>http://www.cnblogs.com/huangzhenwu/archive/2008/07/16/1244348.html</guid><description><![CDATA[摘要: 列出主流相关产品的基本情况和对比分析，以及我使用试用版（都选择的是企业版或专业版）后的分析情况。&nbsp;&nbsp;<a href='http://www.cnblogs.com/huangzhenwu/archive/2008/07/16/1244348.html'>阅读全文</a><img src ="http://GuangZhou.cnblogs.comaggbug/1244348.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41258/" target="_blank">[新闻]微软开放游戏平台 Xbox 360用户可开发新视频游戏</a>]]></description></item><item><title>NiuDown视频下载器 V1.0 Preview2</title><link>http://www.cnblogs.com/winlmh/archive/2008/07/16/1244150.html</link><dc:creator>不戒大师</dc:creator><author>不戒大师</author><pubDate>Wed, 16 Jul 2008 03:57:00 GMT</pubDate><guid>http://www.cnblogs.com/winlmh/archive/2008/07/16/1244150.html</guid><description><![CDATA[<H1 class=block_title><A id=AjaxHolder_ctl01_TitleUrl href="/winlmh/archive/2008/07/08/1238068.html"><FONT color=#a52a2a></FONT></A>&nbsp;</H1>
<DIV class=post>
<DIV class=postcontent>
<P><FONT color=#a52a2a><IMG src="http://www.cnblogs.com/images/cnblogs_com/winlmh/143946/r_123.JPG"><BR><BR></FONT>NiuDown视频下载器 Perview 2</P>
<P>FLV视频的不断完善，在线视频网站的不断发展，使得在线观看FLV视频成了很多人网络生活的一部分。<BR>NiuDown视频下载器，直接下载视频，支持众多视频网站。<BR>目前支持的视频网站<BR>&nbsp;&nbsp;&nbsp; 土豆网 - tudou.com<BR>&nbsp;&nbsp;&nbsp; 优酷网 - youku.com<BR>&nbsp;&nbsp;&nbsp; 酷6网 - ku6.com<BR>&nbsp;&nbsp;&nbsp; 六间房 - 6.cn <BR>&nbsp;&nbsp;&nbsp; 新浪宽频 - video.sina.com.cn<BR>&nbsp;&nbsp;&nbsp; QQ宽频&nbsp; - qq.com<BR>&nbsp;&nbsp;&nbsp; YouTube - YouTube.com</P>
<P>使用方法很简单。</P>
<P>2007-7-16 更新<BR>&nbsp; * 添加列表任务删除功能<BR>&nbsp; * 添加任务下载完成后关机<BR>&nbsp; * 修正标题含有特别字符无法下载</P>
<P><BR><BR><A href="/Files/winlmh/NiuDownPreview2.rar"><FONT color=#ff0000>下载</FONT></A></P></DIV></DIV><img src ="http://GuangZhou.cnblogs.comaggbug/1244150.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41257/" target="_blank">[新闻]访Firefox CEO:Firefox并不完美 但会越来越好</a>]]></description></item><item><title>微软西安.NET俱乐部（.NET User Group) 邀请主讲讲师</title><link>http://www.cnblogs.com/ghd258/archive/2008/07/16/1243632.html</link><dc:creator>高海东</dc:creator><author>高海东</author><pubDate>Wed, 16 Jul 2008 00:14:00 GMT</pubDate><guid>http://www.cnblogs.com/ghd258/archive/2008/07/16/1243632.html</guid><description><![CDATA[<span>&nbsp;&nbsp;&nbsp; &nbsp;<font face="Verdana">微软西安.NET俱乐部（.NET User Group)</font>成立以来,只有我们部分活跃的人员在联系,为了更好的发展俱乐部,提高每个成员的技术,计划开展一些专题技术的研究学习,特邀请以下面为主题的技术主讲师,希望热线的朋友踊跃参与(我们的活动都是非营利的哦)<br />
<br />
&nbsp;&nbsp;&nbsp; * 软件系统架构的设计<br />
&nbsp;&nbsp;&nbsp; * 网站架构的设计<br />
&nbsp;&nbsp;&nbsp; * 组件开发的设计思想&nbsp;<br />
&nbsp;&nbsp;&nbsp; * WPF开发<br />
&nbsp;&nbsp;&nbsp; * 数据库的性能优化和管理<br />
&nbsp;&nbsp;&nbsp; * 网络方向的开发&nbsp;<br />
&nbsp; &nbsp; * CSS&nbsp;<br />
&nbsp;&nbsp; &nbsp;* JS（AJAX）<br />
&nbsp;&nbsp;&nbsp; * 安全性项目管理架构设计&nbsp;<br />
&nbsp;&nbsp;&nbsp; * 需求分析工作流设计（WF）<br />
&nbsp;&nbsp;&nbsp;&nbsp;* ASP.NET MVC&nbsp;<br />
&nbsp;&nbsp;&nbsp; *&nbsp;LINQ （ADO.NET Entity Framework）<br />
&nbsp;&nbsp;&nbsp; * ASP.NET 高性能开发<br />
&nbsp;&nbsp;&nbsp; * uml方面的培训报表开发（Reporting Services）<br />
&nbsp;&nbsp; 有热线的朋友愿意加入我们的讲师团队,请把联系方式:msn 或者qq号码、联系电话、电子邮件、公司、技术特长、主讲课题等发送的我的邮箱：<strong><a href="mailto:ghd258@gmail.com">ghd258@gmail.com</a><br />
&nbsp;&nbsp; (邮件主题请注明加入讲师团队)</strong></span>
 <img src ="http://GuangZhou.cnblogs.comaggbug/1243632.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41256/" target="_blank">[新闻]360安全浏览器发布</a>]]></description></item><item><title>让TextArea支持MaxLength的自定义文本框控件</title><link>http://www.cnblogs.com/hongzhenhua/archive/2008/07/16/1243763.html</link><dc:creator>突破自己</dc:creator><author>突破自己</author><pubDate>Tue, 15 Jul 2008 17:50:00 GMT</pubDate><guid>http://www.cnblogs.com/hongzhenhua/archive/2008/07/16/1243763.html</guid><description><![CDATA[摘要: 让TextArea支持MaxLength的自定义文本框控件&nbsp;&nbsp;<a href='http://www.cnblogs.com/hongzhenhua/archive/2008/07/16/1243763.html'>阅读全文</a><img src ="http://GuangZhou.cnblogs.comaggbug/1243763.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41255/" target="_blank">[新闻]Facebook的改革目标 垃圾邮件和用户隐私</a>]]></description></item><item><title>让客户端js添加的Option也能保持在DropDownList</title><link>http://www.cnblogs.com/hongzhenhua/archive/2008/07/15/1243707.html</link><dc:creator>突破自己</dc:creator><author>突破自己</author><pubDate>Tue, 15 Jul 2008 15:10:00 GMT</pubDate><guid>http://www.cnblogs.com/hongzhenhua/archive/2008/07/15/1243707.html</guid><description><![CDATA[摘要: 让客户端js添加的Option也能保持在DropDownList&nbsp;&nbsp;<a href='http://www.cnblogs.com/hongzhenhua/archive/2008/07/15/1243707.html'>阅读全文</a><img src ="http://GuangZhou.cnblogs.comaggbug/1243707.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41254/" target="_blank">[新闻]2008年7月23日IT博客精选</a>]]></description></item><item><title>超级宝宝比赛 ,有小宝宝的朋友可以去参加哦,请大家多支持164号</title><link>http://www.cnblogs.com/cancanwyq/archive/2008/07/15/1242593.html</link><dc:creator>苏康胜</dc:creator><author>苏康胜</author><pubDate>Tue, 15 Jul 2008 00:26:00 GMT</pubDate><guid>http://www.cnblogs.com/cancanwyq/archive/2008/07/15/1242593.html</guid><description><![CDATA[&nbsp;&nbsp;<br />
<strong style="font-size: 14pt">第164号宝宝就是我家乐乐,请大家投上宝贵的一票(每个IP每天可以投一票), 不需要任何注册,选中164号&nbsp; 按确定即可,先谢谢了<br />
&nbsp;<br />
<font face="Verdana">投票地址&nbsp;<font face="Verdana"><a href="http://szbbs.soufun.com/zt/200807/cjbbds.html">http://szbbs.soufun.com/zt/200807/cjbbds.html</a><br />
</font></font></strong><br />
<a href="http://www.soufun.com/Album/PictureDetail_20963809_200_21727855.htm" target="_blank"><img style="width: 381px; height: 254px" height="254" alt="按此在新窗口浏览图片" src="http://img1.soufun.com/bbs/2008_07/12/sz/1215874410250_000.jpg" width="381" border="0" minmax_bound="true" /></a>&nbsp;<a id="Detail" title="点击查看下一张: IMG_4297" href="http://soufun.com/Album/PictureDetail_20963809_200_21727853.htm" name="Detail"><img id="Picture" style="width: 371px; height: 248px" height="248" alt="点击查看下一张: IMG_4297" src="http://img1.soufun.com/bbs/2008_07/12/sz/1215874358639_000.jpg" width="371" onload="Image.Resize(this,545);" border="0" /></a> 
<img src ="http://GuangZhou.cnblogs.comaggbug/1242593.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41253/" target="_blank">[新闻]盖茨租空中四合院看奥运 一年租费达一亿元</a>]]></description></item><item><title>TextBoxWatermark文本框水印效果</title><link>http://www.cnblogs.com/hongzhenhua/archive/2008/07/13/1241899.html</link><dc:creator>突破自己</dc:creator><author>突破自己</author><pubDate>Sun, 13 Jul 2008 08:16:00 GMT</pubDate><guid>http://www.cnblogs.com/hongzhenhua/archive/2008/07/13/1241899.html</guid><description><![CDATA[摘要: TextBoxWatermark文本框水印效果&nbsp;&nbsp;<a href='http://www.cnblogs.com/hongzhenhua/archive/2008/07/13/1241899.html'>阅读全文</a><img src ="http://GuangZhou.cnblogs.comaggbug/1241899.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41252/" target="_blank">[新闻]美国安全公司粗心大意致DNS漏洞详情提前曝光</a>]]></description></item><item><title>发布一个C#+ADOMD.NET实现查看分析服务数据库信息的类对象</title><link>http://www.cnblogs.com/xuanfeng/archive/2008/07/13/1241878.html</link><dc:creator>xuanfeng</dc:creator><author>xuanfeng</author><pubDate>Sun, 13 Jul 2008 08:04:00 GMT</pubDate><guid>http://www.cnblogs.com/xuanfeng/archive/2008/07/13/1241878.html</guid><description><![CDATA[摘要: 类实现的功能<br>1.	获取多维数据集信息<br>2.	获取度量值信息<br>3.	获取维度信息<br>4.	获取维度层次结构信息<br>5.	获取维度层结构级别信息<br>6.	获取维度层结构级别成员信息<br>7.	获取KPI信息<br>8.	获取命名集信息<br><br>类的关系图与类的详细信息<br>类的代码实现<br>效果演示与演示代码下载<br>&nbsp;&nbsp;<a href='http://www.cnblogs.com/xuanfeng/archive/2008/07/13/1241878.html'>阅读全文</a><img src ="http://GuangZhou.cnblogs.comaggbug/1241878.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41251/" target="_blank">[新闻]中国互联网历史上最伟大的产品TOP10</a>]]></description></item><item><title>开源SmallData轻量数据访问组件</title><link>http://www.cnblogs.com/henryfan/archive/2008/07/12/1241444.html</link><dc:creator>henry</dc:creator><author>henry</author><pubDate>Sat, 12 Jul 2008 07:39:00 GMT</pubDate><guid>http://www.cnblogs.com/henryfan/archive/2008/07/12/1241444.html</guid><description><![CDATA[摘要:  这个组件是从NClay.Data基础功能分离出来，主要功能以下功能：一致的数据库访问方式，基于接口的数据库提供者扩展，基于线程的连接对象句柄可以简单实现跨方法的数据库事务处理能力；组件配备6个数据库连接设置通过DBContext的不同版本的Region方法来进行不同数据库操作。组件才用Apache License 2.0协议。辅助工具：迟下将会提供一个Code Generator用于实现简单描述&nbsp;&nbsp;<a href='http://www.cnblogs.com/henryfan/archive/2008/07/12/1241444.html'>阅读全文</a><img src ="http://GuangZhou.cnblogs.comaggbug/1241444.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41250/" target="_blank">[新闻]微软宣布Games for Windows全免费</a>]]></description></item><item><title>统一项目按钮外观</title><link>http://www.cnblogs.com/hongzhenhua/archive/2008/07/12/1241359.html</link><dc:creator>突破自己</dc:creator><author>突破自己</author><pubDate>Sat, 12 Jul 2008 04:04:00 GMT</pubDate><guid>http://www.cnblogs.com/hongzhenhua/archive/2008/07/12/1241359.html</guid><description><![CDATA[摘要: 统一项目按钮外观一种最简单的方法就是扩展Button。这里我们举例用最常用的按钮、Add，Edit、DeleteAdd一般是跳转URL，Edit也是跳转URL，Delete一般需要后台处理。以下是源代码，请大家多多提意见。 /**////&lt;summary&gt;//////&lt;/summary&gt;[ToolboxBitmap(typeof(TDButton),"WebximumWeb&nbsp;&nbsp;<a href='http://www.cnblogs.com/hongzhenhua/archive/2008/07/12/1241359.html'>阅读全文</a><img src ="http://GuangZhou.cnblogs.comaggbug/1241359.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41249/" target="_blank">[新闻]谷歌或以2亿美元左右收购Digg网站</a>]]></description></item><item><title>自定义文本框控件，包含Name跟ID</title><link>http://www.cnblogs.com/hongzhenhua/archive/2008/07/11/1240355.html</link><dc:creator>突破自己</dc:creator><author>突破自己</author><pubDate>Thu, 10 Jul 2008 16:40:00 GMT</pubDate><guid>http://www.cnblogs.com/hongzhenhua/archive/2008/07/11/1240355.html</guid><description><![CDATA[我们项目需要开发一个特殊的文本框，当点击文本框的时候弹出一个产品的窗口，选择一个产品之后，窗口关闭，把产品的名称跟产品的标识保存在文本框中，单击保存按钮处理单击事件的后台程序可以获取到选中产品的标识。<br />
有了这样的需求后，让我们来开始设置这个控件。<br />
第一步：在原有的Textbox进行扩展<br />
public class SelectProductEditor : TextBox<br />
{<br />
}<br />
第二步：就是要考虑如何保存选中产品的标识了。这里我们是动态添加一个TextBox，让它来保持选中产品的标识。<br />
<font face="Verdana">private TextBox txtProductID;</font><br />
/// &lt;summary&gt;<br />
<div align="left">/// 动态添加一个TextBox，让它来保持选中产品的标识<br />
/// &lt;/summary&gt;<br />
/// &lt;param name="e"&gt;&lt;/param&gt;<br />
protected override void OnInit(EventArgs e)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.OnInit(e);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (txtProductID == null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtProductID = new TextBox();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtProductID.ID = ClientID + "ID";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtProductID.Attributes["style"] = "display:none;";<br />
}<br />
第三步：就是如何得到动态生成的TextBox的Text。这里我们通过重载LoadPostData，获取动态添加TextBox的回发数值。<br />
/// &lt;summary&gt;<br />
/// <br />
/// &lt;/summary&gt;<br />
/// &lt;param name="postDataKey"&gt;&lt;/param&gt;<br />
/// &lt;param name="postCollection"&gt;&lt;/param&gt;<br />
/// &lt;returns&gt;&lt;/returns&gt;<br />
protected override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strTemp = postCollection[this.ClientID + "ID"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(string.IsNullOrEmpty(strTemp) == false)<br />
&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; <font face="Verdana">txtProductID.Text</font>= strTemp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return base.LoadPostData(postDataKey, postCollection);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
第四步：公开一个属性来获取产品标识的值<br />
<font face="Verdana">/// &lt;summary&gt;<br />
/// 获取产品标识的值<br />
/// &lt;/summary&gt;<br />
[DefaultValue(""), Localizable(true), Bindable(true, BindingDirection.TwoWay), Category("Appearance"), Description("TextBox_ProductID"), PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty), Editor("System.ComponentModel.Design.MultilineStringEditor,System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br />
public string ProductID<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string text1 =&nbsp;this.<font face="Verdana">txtProductID</font>.Text;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (text1 != null)<br />
&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; return text1;<br />
&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; return string.Empty;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.<font face="Verdana">txtProductID</font>.Text = value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</font></div>
<div align="left">到这里，就可以实现一个文本框即可以获取产品的名称同时也可以获取产品的标识。</div>
 <img src ="http://GuangZhou.cnblogs.comaggbug/1240355.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41248/" target="_blank">[新闻]Google Social Graph API智能寻找链接</a>]]></description></item><item><title>ADOMD。NET查询Analysis Servies中多维数据集</title><link>http://www.cnblogs.com/xuanfeng/archive/2008/07/10/1239990.html</link><dc:creator>xuanfeng</dc:creator><author>xuanfeng</author><pubDate>Thu, 10 Jul 2008 06:27:00 GMT</pubDate><guid>http://www.cnblogs.com/xuanfeng/archive/2008/07/10/1239990.html</guid><description><![CDATA[摘要: 本文内容<br>1.       ADOMD。NET查询Analysis Servies中多维数据集 <br>2.       把查询返回来的单元集合转化为DataTable<br>&nbsp;&nbsp;<a href='http://www.cnblogs.com/xuanfeng/archive/2008/07/10/1239990.html'>阅读全文</a><img src ="http://GuangZhou.cnblogs.comaggbug/1239990.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41247/" target="_blank">[新闻]Mozilla中国吉祥物G-Fox:带着Firefox力量从宇宙中来</a>]]></description></item><item><title>NiuDown视频下载器 V1.0 Preview</title><link>http://www.cnblogs.com/winlmh/archive/2008/07/08/1238068.html</link><dc:creator>不戒大师</dc:creator><author>不戒大师</author><pubDate>Tue, 08 Jul 2008 04:04:00 GMT</pubDate><guid>http://www.cnblogs.com/winlmh/archive/2008/07/08/1238068.html</guid><description><![CDATA[<P><IMG src="http://www.cnblogs.com/images/cnblogs_com/winlmh/143946/r_123.JPG"><BR><BR>FLV视频的不断完善，在线视频网站的不断发展，使得在线观看FLV视频成了很多人网络生活的一部分。<BR>NiuDown视频下载器，直接下载视频，支持众多视频网站。<BR>目前支持的视频网站<BR>&nbsp;&nbsp;&nbsp; 土豆网 - tudou.com<BR>&nbsp;&nbsp;&nbsp; 优酷网 - youku.com<BR>&nbsp;&nbsp;&nbsp; 酷6网 - ku6.com<BR>&nbsp;&nbsp;&nbsp; 六间房 - 6.cn <BR>&nbsp;&nbsp;&nbsp; 新浪宽频 - video.sina.com.cn<BR>&nbsp;&nbsp;&nbsp; QQ宽频&nbsp; - qq.com<BR>&nbsp;&nbsp;&nbsp; YouTube - YouTube.com</P>
<P>使用方法很简单。<BR><BR><A href="/Files/winlmh/NiuDown视频下载器.rar">下载</A></P><img src ="http://GuangZhou.cnblogs.comaggbug/1238068.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41246/" target="_blank">[新闻]从食堂看谷歌文化</a>]]></description></item></channel></rss>