<?xml version="1.0" encoding="utf-8"?>
<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>mike's web log</title>
    <link>http://www.mikepope.com/blog/</link>
    <description>mike pope's Web log</description>
    <dc:language xmlns:dc="dc">en-US</dc:language>
    <docs>http://www.mikepope.com/blog/BlogFeed.rss</docs>
    <webMaster>mike@mikepope.com</webMaster>
    <lastBuildDate>Tue, 07 Sep 2010 23:44:52 GMT</lastBuildDate>
    <pubDate>Tue, 07 Sep 2010 00:00:00 GMT</pubDate>
    <ttl>60</ttl>
    <item>
      <title>Handling version changes in documentation</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2209</link>
      <description>Just wondering what sorts of examples people might have of documentation sets that cover multiple versions of the same product. In our doc set in MSDN, we basically republish each complete doc set, but updated for the new version with corrections and new features:&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-left:50px"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/default.aspx" target="_blank"&gt;&lt;img src="http://www.mikepope.com/blog/images/MSDNVersions.png" width='285' height='574' style="border:none;"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The advantage is you can go right to your version and be assured that what you're reading applies to you. The disadvantage is that the versions pile up (4 versions and counting), with a &lt;em&gt;lot&lt;/em&gt; of overlap, which is inefficient in various dimensions.&lt;br /&gt;&lt;br /&gt;Are you familiar with a doc set that handles versioning differently than this? (Conceptual or API reference or both.) If so, leave a comment with a link.&lt;br /&gt;&lt;br /&gt;Thanks!</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>writing,aspnet,technology</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2209</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2209</guid>
      <pubDate>Tue, 10 Aug 2010 18:12:27 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2209</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2209</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2209</wfw:commentRss>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>WebMatrix and ASP.NET Razor</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2206</link>
      <description>By now you'll probably know that we released (in beta) a &lt;a href="http://www.microsoft.com/web/webmatrix/" target="_blank"&gt;new version&lt;/a&gt;, I guess you'd call it, of ASP.NET. It's not really a new version -- same old ASP.NET behind the scenes -- just a new and simpler syntax on top of ASP.NET. There are various ways to think about this, like "MVC for the rest of us" or "ASP Classic done right" or, you know, many others. :-) The emphasis is on reducing the amount of code (indeed, the "concept count") required to do many of the things that people want to be able to do with websites.&lt;br /&gt;&lt;br /&gt;I just love this stuff. The Web Forms model was predicated on the idea of making web development something like forms for Windows client apps -- the page is a form, you drop controls onto it, set their properties, and respond to their events. This basically worked, although as many people pointed out over the years, this type of client-forms analogy was a &lt;a href="http://www.joelonsoftware.com/articles/LeakyAbstractions.html" target="_blank"&gt;leaky abstraction&lt;/a&gt;. There's a certain black-box quality to the Web Forms model, and doing tricky stuff -- perhaps &lt;a href="http://weblogs.asp.net/infinitiesloop/archive/2007/09/04/TRULY-Understanding-Dynamic-Controls-_2800_Part-4_2900_.aspx " target="_blank"&gt;just adding controls on the fly&lt;/a&gt; -- tended to make it clear just how much man there was behind the curtain. Plus its 8+ years of development have left it with a certain amont of cruft; even internally we still see questions about how to do things with (e.g.) the &lt;strong&gt;DataGrid&lt;/strong&gt; control.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.mikepope.com/blog/images/WebMatrixLogo.png" width='179' height='169' style="float:right;margin:8px;"/&gt;&lt;a href="http://www.asp.net/mvc" target="_blank"&gt;ASP.NET MVC&lt;/a&gt; [&lt;a href='http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2206'&gt;more&lt;/a&gt;]</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>aspnet</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2206</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2206</guid>
      <pubDate>Tue, 06 Jul 2010 15:06:57 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2206</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2206</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2206</wfw:commentRss>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Out, damned space</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2194</link>
      <description>The other day I was doing something where I wanted to display some data as a comma-delimited list, like so:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;a, b, c, d&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This seemed like a job for the &lt;strong&gt;Repeater&lt;/strong&gt; control. So I created the markup for the control and included a separator template, like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;asp:Repeater runat="server" ID="Repeater1" DataSourceID="LinqDataSource3"  &amp;gt;&lt;br /&gt;  &amp;lt;ItemTemplate&amp;gt;&lt;br /&gt;    &amp;lt;asp:Label runat="server" ID="labelCategory" Text='&amp;lt;%# Eval("Category") %&amp;gt;'&amp;gt;&lt;br /&gt;    &amp;lt;/asp:Label&amp;gt;&lt;br /&gt;  &amp;lt;/ItemTemplate&amp;gt;&lt;br /&gt;  &amp;lt;SeparatorTemplate&amp;gt;, &amp;lt;/SeparatorTemplate&amp;gt;&lt;br /&gt;&amp;lt;/asp:Repeater&amp;gt;&lt;/pre&gt;&lt;br /&gt;The result was this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;a , b , c, d&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;One thing was right (no trailing comma). But there was that silly space between the data item and the delimiter.&lt;br /&gt;&lt;br /&gt;I spent as much as a minute looking to see if there was an easy fix for this. Failing in this effort, I invented a solution that seems ... well ... kinda complex, considering. So this is where the Internet tells me that a) I'm using the wrong control and/or b) alls you have to do is set a property, duh. &lt;br /&gt;&lt;br /&gt;In the meantime, tho, what I ended up doing was this: I handled the &lt;strong&gt;Repeater&lt;/strong&gt; control's &lt;strong&gt;PreRender&lt;/strong&gt; event, which is well after data binding and about the last time you can go in and mess about with the markup that the control will render. In that event, I walked the contents of the &lt;strong&gt;Repeater&lt;/strong&gt; control to, in effect, trim spaces. &lt;br /&gt;&lt;br /&gt;But it wasn't quite as simple as I thought. Instead of being able to grub around directly -- in a simple string that represented the markup being rendered, say -- I was obliged to walk the control tree that was inside the &lt;strong&gt;Items&lt;/strong&gt; [&lt;a href='http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2194'&gt;more&lt;/a&gt;]</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>aspnet</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2194</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2194</guid>
      <pubDate>Tue, 09 Feb 2010 02:48:47 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2194</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2194</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2194</wfw:commentRss>
      <slash:comments>8</slash:comments>
    </item>
    <item>
      <title>New template for ASP.NET Web site projects</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2191</link>
      <description>Visual Web Developer has long had a blank-sheet-of-paper issue when you create a new Web site project or Web application project in Visual Studio. As in, you create the project and then you, developer person, get to start adding your own layout (master pages, css), content, and optionally, authentication. Among other things. &lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" style="border:none;" href="http://www.paulcarr.com/first-two-reviews-positive-all-downhill-from-here/"&gt;&lt;img style="border:none;float:right;margin:8px;" src="http://mikepope.com/blog/images/TypewriterBlankPage_60.png" width="240" height="239" /&gt;&lt;/a&gt;In the 2.0 release, we had what were referred to as &lt;a href="http://www.asp.net/community/projects/" target="_blank"&gt;Starter Kits&lt;/a&gt;, which were prebuilt apps for what were perceived to be common tasks -- "personal Web site" (which included a photo album -- this was before Flickr), time tracker, club site, stuff like that. But Starter Kits were, at best, a kind of add-on, and of course assumed that your goal was one of the types of Web sites for which a Starter Kit was available.&lt;br /&gt;&lt;br /&gt;For ASP.NET 4, they've decided that pretty much all apps needed a certain core set of functionality. So for ASP.NET 4, when you create a Web project, you get certain functionality out of the box. The exception is if you explicitly choose to create an empty Web site (thusly named), which is about as empty as you can get. (You get a skeleton Web.config file and that's &lt;em&gt;it&lt;/em&gt;.) &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What you get&lt;/b&gt;&lt;br /&gt;Here's what Visual Studio 2010 builds for you when you create a new Web site/application project:&lt;ul&gt;  &lt;li&gt;Web site folder structure.&lt;br /&gt;  &lt;li&gt;A master page.&lt;br /&gt;  &lt;li&gt;A &lt;b&gt;Menu&lt;/b&gt; control (tabs) on master page that link to individual content pages.&lt;br /&gt;  &lt;li&gt;A CSS file (Styles folder).&lt;br /&gt;  &lt;li&gt;2 free-form content pages (Default, About).&lt;br /&gt;  &lt;li&gt;jQuery (Scripts folder).&lt;br /&gt;  &lt;li&gt;Routing (which is basically just enabled by default).&lt;br /&gt;  &lt;li&gt;A Web.config file.&lt;br /&gt;  &lt;li&gt;A Global.asax file.&lt;br /&gt; [&lt;a href='http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2191'&gt;more&lt;/a&gt;]</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>aspnet</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2191</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2191</guid>
      <pubDate>Mon, 18 Jan 2010 17:21:19 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2191</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2191</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2191</wfw:commentRss>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>ASP.NET page life cycle</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2190</link>
      <description>Just a quick note to draw your attention to an updated ASP.NET page life-cycle diagram that my colleague Tom has done for the docs:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/aspnetue/archive/2010/01/14/asp-net-page-life-cycle-diagram.aspx" target="_blank"&gt;ASP.NET Page Life Cycle Diagram&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here's a little peek (I don't want to steal his thunder, so I won't show the whole thing):&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-left:50px"&gt;&lt;a href="http://blogs.msdn.com/aspnetue/archive/2010/01/14/asp-net-page-life-cycle-diagram.aspx" target="_blank"&gt;&lt;img style="border:none;" src="http://www.mikepope.com/blog/images/PageLifeCycle.png" width='570' height='189' /&gt;&lt;/a&gt;&lt;/div&gt;</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>aspnet</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2190</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2190</guid>
      <pubDate>Fri, 15 Jan 2010 09:51:21 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2190</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2190</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2190</wfw:commentRss>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Documentation survey!</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2179</link>
      <description>Do you use our documentation? (Golly, hope so. :-) ) Give us some feedback -- take the survey that's posted here:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.surveymonkey.com/s.aspx?sm=qQnlYIN2D5gQH7UhLrQyuA_3d_3d" target="_blank"&gt;https://www.surveymonkey.com/s.aspx?sm=qQnlYIN2D5gQH7UhLrQyuA_3d_3d&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This asks some basic information, like where you get your technical information and how you go about finding it, as well as how best to get your feedback, what type of development you do, etc.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.surveymonkey.com/s.aspx?sm=qQnlYIN2D5gQH7UhLrQyuA_3d_3d" target="_blank"&gt;&lt;img src="http://www.mikepope.com/blog/images/MSDNSurvey.png" width='534' height='377' /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I can assure you that we look at this stuff intently, we really do. I encourage you to go through the survey. It's only 11 questions, and it will help us out.&lt;br /&gt;&lt;br /&gt;Thanks!&lt;br /&gt;</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>aspnet,technology,writing</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2179</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2179</guid>
      <pubDate>Fri, 30 Oct 2009 14:35:27 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2179</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2179</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2179</wfw:commentRss>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>New location (and look) for ASP.NET documentation</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2177</link>
      <description>ASP.NET documentation actually has a couple of homes. There's the grab-bag of articles, tutorials, and videos about ASP.NET that's posted on the &lt;a href="http://www.asp.net/learn/" target="_blank"&gt;http://asp.net site&lt;/a&gt;. And the official documentation -- the stuff I work on -- lives on &lt;a href="http://msdn.microsoft.com/en-us/library/default.aspx" target="_blank"&gt;MSDN&lt;/a&gt;, the gigantic library of Microsoft information. &lt;br /&gt;&lt;br /&gt;We released Beta 2 of the .NET Framework&amp;nbsp;4 and Visual Studio&amp;nbsp;2010 today. As part of the docs push, we managed a change that we've actually been wanting to make for a long time. Since approximately forever, our stuff has been part of the overall Visual Studio documentation, and it's taken some digging to find it:&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-left:50px"&gt;&lt;img src="http://www.mikepope.com/blog/images/MSDN_ASPNETDocs1.png" width='336' height='357' /&gt;&lt;/div&gt;&lt;br /&gt;Whereas all this time we've had this &lt;em&gt;other&lt;/em&gt; node in MSDN that seemed like it would make a good home for our docs. And as of today, that's where you'll find our stuff:&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-left:50px"&gt;&lt;img src="http://www.mikepope.com/blog/images/MSDN_ASPNETDocs2.png" width='283' height='276' /&gt;&lt;/div&gt;&lt;br /&gt;The new organization reflects a couple of things. One, obviously, is that if you're scanning the MSDN table of contents (TOC) looking for ASP.NET stuff, a pretty likely place to look is in a node that's about Web development. We wanted to reduce the clicking required to get to the doc, of course. Another change is that because the docs are not tied specifically to versions of Visual Studio, you can see that we can keep ASP.NET&amp;nbsp;4 and ASP.NET&amp;nbsp;3.5 documentation close to each other in the TOC.[&lt;a href='#newlocationandlookforaspnetdocumentation1'&gt;1&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt; [&lt;a href='http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2177'&gt;more&lt;/a&gt;]</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>aspnet,writing</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2177</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2177</guid>
      <pubDate>Mon, 19 Oct 2009 10:41:18 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2177</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2177</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2177</wfw:commentRss>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Foiled attack</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2174</link>
      <description>Earlier today, someone left the following "comment" on an entry in the blog:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;% foreach (var x in ConfigurationManager.ConnectionStrings){%&amp;gt;&amp;lt;%= x.ToString() + "&amp;lt;br /&amp;gt;" %&amp;gt;&amp;lt;% } %&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This is an attempt, obviously, to get connection information about any and all databases that the blog has access to.&lt;br /&gt;&lt;br /&gt;In this particular case, the attack was not successful because I encode stuff in comments, so it was just passed through as text. I sure hope that I've anticipated other, relatively straightforward attacks of a similar nature. But as we know, hackers are wily. And I am not particularly so, alas.&lt;br /&gt;&lt;br /&gt;It goes to show that no matter how trivial your site, someone is interested in hacking it. Security: It's not just for commercial web sites.&lt;br /&gt;</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>blog,aspnet</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2174</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2174</guid>
      <pubDate>Thu, 15 Oct 2009 14:07:51 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2174</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2174</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2174</wfw:commentRss>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>If you can't say something nice ...</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2143</link>
      <description>At work, we write documentation for programmers, so our docs include many code examples[&lt;a href='#ifyoucantsaysomethingnice1'&gt;1&lt;/a&gt;]. We should comment our code, right? Of course. However, a discussion broke out in our ranks yesterday about the whole idea of commenting the example code. The discussion arose out of the complaint that a lot of comments in a lot of code (not just ours) are actually lame. This was an observation made in a recent &lt;a href="http://hackingon.net/post/Thoughts-on-nerddinner.aspx" target="_blank"&gt;blog entry&lt;/a&gt;, which used the following as an example:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.mikepope.com/blog/images/LameComments.png" width='518' height='193' /&gt;&lt;br /&gt;&lt;br /&gt;In the wake of this, a semi-unserious proposal was made that because most comments are dumb, we should just strip all comments from the example code. Because code examples are not translated, we have to explain the code in the text of a topic anyway. &lt;br /&gt;&lt;br /&gt;Hmmm. This type of proposal is useful for goading me into thinking through our policy. Herewith my thots:&lt;ul&gt;&lt;li&gt;Having &lt;em&gt;decent&lt;/em&gt; comments in a snippet is useful for the person who copies and pastes an example into their application, even if the code is explained in the topic.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;As with &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.actionnameattribute.name.aspx" target="_blank"&gt;member descriptions&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/02se1ya4(VS.80).aspx" target="_blank"&gt;descriptions in orientation topics&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/fshz3d5x(VS.80).aspx" target="_blank"&gt;UI reference topics&lt;/a&gt;, and other such, it takes time and thought to create a comment that is actually useful to the reader. All of these types of text share the characteristic that they are often written as an afterthought, in a hurry, only to fulfill a general requirement, or while the writer's attention is focused elsewhere.&lt;/li&gt;&lt;br /&gt;&lt;li&gt; [&lt;a href='http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2143'&gt;more&lt;/a&gt;]</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>writing,aspnet</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2143</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2143</guid>
      <pubDate>Thu, 02 Jul 2009 11:18:53 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2143</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2143</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2143</wfw:commentRss>
      <slash:comments>4</slash:comments>
    </item>
    <item>
      <title>Why &lt;i&gt;not&lt;/i&gt; link to Wikipedia?</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2129</link>
      <description>An issue that has come up a number of times at work is the question of linking to articles in Wikipedia. It's not terribly unusual for us to link from the documentation set to non-Microsoft resources. A common example in my world is linking to the W3C site. For example, in the topic (article) &lt;a href="http://msdn.microsoft.com/en-us/library/exc57y7e.aspx" target="_blank"&gt;ASP.NET and XHTML&lt;/a&gt;, we discuss how we implement (or don't) XHTML standards, but we refer you to the W3C site for actual standards.&lt;br /&gt;&lt;br /&gt;Other examples where we've linked to external sites:&lt;ul&gt;&lt;li&gt;The &lt;a href="http://www.section508.gov/" target="_blank"&gt;Section 508&lt;/a&gt; site for information about accessibility.&lt;br /&gt;&lt;li&gt;The &lt;a href="http://www.iana.org/assignments/media-types/" target="_blank"&gt;IANA site&lt;/a&gt; for a reference of MIME types.&lt;br /&gt;&lt;li&gt;The &lt;a href="https://developer.mozilla.org/en/Gecko_DOM_Reference" target="_blank"&gt;Mozilla developer site&lt;/a&gt; for information about the document object model (DOM) supported in the Gecko browser rendering engine.&lt;br /&gt;&lt;li&gt;The &lt;a href="http://www.unicode.org/" target="_blank"&gt;Unicode site&lt;/a&gt; for (duh) information about Unicode.&lt;/ul&gt;There are more, but you get the idea. The thought here is that these sites provide information that is not specific to our product but that is useful to our audience. It would be silly for us to copy this info or (god forbid) rewrite it so it could be part of our documentation site.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.mikepope.com/blog/images/expertquality.png" width='95' height='168' align="right" style="margin:10px;"/&gt;You will probably note that sites have certain features in common. They are:&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Authoritative&lt;/strong&gt;. Many of our links are to the sites of standards bodies.&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Commercially neutral&lt;/strong&gt;, at least for the purposes for which we are linking. For example, the Mozilla site could be thought of as a competitor to, say, Internet Explorer, but from our perspective (server-based Web coding), it's just another client. &lt;br /&gt;&lt;li&gt;&lt;strong&gt; [&lt;a href='http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2129'&gt;more&lt;/a&gt;]</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>writing,aspnet,editing</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2129</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2129</guid>
      <pubDate>Thu, 07 May 2009 22:07:40 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2129</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2129</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2129</wfw:commentRss>
      <slash:comments>2</slash:comments>
    </item>
    <item>
      <title>My poor memory for old technology</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2092</link>
      <description>I've been in this industry a long time. This doesn't make me smart, just ... old. Being old, I find that my memory just isn't what it once was (which wasn't much). So for example ...&lt;br /&gt;&lt;br /&gt;A little while ago, AJAX took the Web-development world by storm. So cool! So interactive! You could do so much in the browser by using this JavaScript thing. Now, my memory is so faulty that I distinctly remember that around 1999 or so, JavaScript was the bane of Web development. It was for, you know, &lt;em&gt;Web&lt;/em&gt; developers. Scripters. Markup people. Not Professional Programmers. Real programmers used C. (Unbelievable how bad my memory is, don't you agree?)&lt;br /&gt;&lt;br /&gt;And you know, speaking of Web development, when AJAX came out, another thing that people were excited about was that you could do everything in the browser! No more of those round trips to the server and that annoying browser "flash" on postback that users all over the world were so up in arms about. (Some were refusing to use the Web at all, I heard, unless this was fixed.) And again, my memory is so wretched that I could have sworn that when ASP.NET 1.0 came out, putting all the processing on the server on a browser-independent platform was considered a big step forward. Obviously, I'm totally remembering &lt;em&gt;that&lt;/em&gt; wrong.&lt;br /&gt;&lt;br /&gt;Dynamic languages. Typeless variables, interpreters, extensible objects -- so flexible and convenient! This was very confusing to me, because I seemed to remember -- dang, the tricks that the aging brain plays on you -- that there was a time when type safety and compilation and all that OOP stuff were things that we &lt;em&gt;wanted&lt;/em&gt; for coding.&lt;br /&gt;&lt;br /&gt;And just recently, my mind has again been leading me astray. I've been reading about ASP.NET MVC and all its great features like the advantages of having &lt;em&gt;complete control&lt;/em&gt; [&lt;a href='http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2092'&gt;more&lt;/a&gt;]</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>technology,aspnet</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2092</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2092</guid>
      <pubDate>Wed, 14 Jan 2009 21:53:41 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2092</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2092</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2092</wfw:commentRss>
      <slash:comments>5</slash:comments>
    </item>
    <item>
      <title>Docs for creating custom controls</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2078</link>
      <description>This is a question about the documentation on MSDN. There's a section on how to create custom ASP.NET controls, which starts at &lt;a href="http://msdn.microsoft.com/en-us/library/zt27tfhy.aspx" target="_blank"&gt;Developing Custom ASP.NET Server Controls&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-left:50px"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/zt27tfhy.aspx" target="_blank"&gt;&lt;img src="images/DevelopingServerControlsMSDN.jpg" width='518' height='439' /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;We're looking at maybe updating this, so we'd like to know from you:&lt;ul&gt;&lt;li&gt;Have you used these docs?&lt;br /&gt;&lt;li&gt;If so, what information did you &lt;em&gt;not&lt;/em&gt; find?&lt;br /&gt;&lt;li&gt;If you tried using them but gave up, what was missing? &lt;/ul&gt;Any feedback you might have about this section of the ASP.NET docs would be very welcome.&lt;br /&gt;&lt;br /&gt;Thanks!</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>aspnet</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2078</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2078</guid>
      <pubDate>Mon, 08 Dec 2008 13:40:02 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2078</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2078</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2078</wfw:commentRss>
      <slash:comments>4</slash:comments>
    </item>
    <item>
      <title>Can you use Web Forms controls with MVC?</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2077</link>
      <description>As more people delve into ASP.NET MVC, we see more questions from people who are used to the Web Forms model and are curious where these technologies overlap. We have &lt;a href="http://quickstarts.asp.net/previews/mvc/mvc_ViewsAndViewRendering.htm" target="_blank"&gt;noted in the docs&lt;/a&gt; that views can be .aspx pages. Ok, that being the case, can you use normal Web Forms controls on an .aspx page that is being used as V in MVC? Someone posed the question on an internal list this way: "Which existing controls can you safely use in MVC? Can you use the &lt;strong&gt;GridView&lt;/strong&gt; control? Can you use the &lt;strong&gt;TextBox&lt;/strong&gt; control?"&lt;br /&gt;&lt;br /&gt;This is one of those deals where the answer is "No. Yes. Maybe." In response to the internal query, &lt;a href="http://weblogs.asp.net/LeftSlipper/" target="_blank"&gt;Eilon Lipton&lt;/a&gt; explained: &lt;br /&gt;&lt;blockquote&gt;In general, from a very technical perspective, no controls at all are "safe" to use in MVC except for ones that have to do with page structure: &lt;strong&gt;Page&lt;/strong&gt;, &lt;strong&gt;UserControl&lt;/strong&gt;, &lt;strong&gt;MasterPage&lt;/strong&gt;, &lt;strong&gt;ContentPlaceHolder&lt;/strong&gt;, and &lt;strong&gt;Content&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Even controls that might appear to be "safe," such as &lt;strong&gt;Panel&lt;/strong&gt;, are not as safe as you think. There are many features of the &lt;strong&gt;Panel&lt;/strong&gt; control that won’t work in MVC view pages. Having said that, almost any control &lt;em&gt;can&lt;/em&gt; be used in an MVC ViewPage as long as you constraint yourself with regard to which features of that control you use.&lt;/blockquote&gt;The problem is that most Web Forms controls rely on postbacks and on viewstate; neither of those things obtains in MVC. When Eilon says "if you constrain yourself," he is effectively saying if you're not counting on viewstate or postback. And although you yourself might not be explicitly using these features, behavior that's cooked into the Web Forms controls often is. For example, an ASP.NET &lt;strong&gt;Button&lt;/strong&gt; control raises its server-side &lt;strong&gt;Click&lt;/strong&gt; [&lt;a href='http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2077'&gt;more&lt;/a&gt;]</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>aspnet</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2077</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2077</guid>
      <pubDate>Fri, 05 Dec 2008 12:07:11 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2077</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2077</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2077</wfw:commentRss>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>When do you use Design view?</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2061</link>
      <description>At PDC2008, Jeff King &lt;a href="http://channel9.msdn.com/pdc2008/TL48/" target="_blank"&gt;demonstrated&lt;/a&gt; features and improvements that his team is proposing for the next release Visual Web Developer. Among them are lots of tweaks to HTML editing. This got me thinking about my own use of Design view and Source view, and when and why I use each. &lt;br /&gt;&lt;br /&gt;From one narrow perspective, the history of the Visual Studio tools for creating Web pages -- starting with &lt;a href="http://www.irt.org/software/sw011/index.htm" target="_blank"&gt;Visual InterDev&lt;/a&gt; (remember him?) through Visual Studio 2008 SP1 -- has been a history of improving Design view. If you remember that far back, in Visual Studio .NET (for versions 1.0 and 1.1 of ASP.NET), the page you edited in Design view and the page in Source view were related but separate; when you switched views, each view recreated the page from scratch. Lots of people did not like how switching views could hose up your formatting. Plus the editor inserted some Visual Studio-specific (and of course non-standard) attributes into the page to give itself some formatting clues, and that likewise was not popular in certain quarters.&lt;br /&gt;&lt;br /&gt;In Visual Studio 2005 and beyond, it was a priority to make sure that when you switch views, Source view formatting is maintained scrupulously. And (AFAIK) thus it is: what you do in Design view is persisted in Source view, and in addition any custom formatting you've done in Source view is retained. We don’t mess with your markup. (Selection is maintained between views as well.) &lt;br /&gt;&lt;br /&gt;And yet I spend most of my time in Source view. Partly this is because Source view itself has gotten more and more capable. You can drag from the Toolbox and you can use the Properties window. IntelliSense now works with pretty much everything. You can set options for how the editor formats tags and code.&lt;br /&gt;&lt;br /&gt;I thought about it, and here's when I do use Design view:&lt;ul&gt;&lt;li&gt; [&lt;a href='http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2061'&gt;more&lt;/a&gt;]</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>aspnet</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2061</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2061</guid>
      <pubDate>Mon, 10 Nov 2008 18:09:00 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2061</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2061</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2061</wfw:commentRss>
      <slash:comments>2</slash:comments>
    </item>
    <item>
      <title>Engineers who write/Writing for engineers</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2060</link>
      <description>In the latest MSDN magazine Richard Ward has &lt;a href="http://msdn.microsoft.com/en-us/magazine/dd153757.aspx" target="_blank"&gt;a column&lt;/a&gt; titled "Engineers Who Write." It might also have been titled "Writing for engineers." Ward's thesis is that engineers need to be able to communicate in writing, and that this is harder than being able to communicate in person. One of things he sees in engineering documents, he says, is this:&lt;br /&gt;&lt;blockquote&gt;A precise model helps, for example, when specifying the interactions between two instances, such as a network protocol. These forms can express the how of a design very effectively because they are, in a sense, only one step removed from the actual code expressing that design. &lt;strong&gt;They do not, however, explain the why of a design.&lt;/strong&gt;&lt;/blockquote&gt;Emphasis mine. I have seen this approximately one (1) million times. Not unexpectedly, I almost always see it (don't see it?) in feature specifications, where (as Ward says), you find lots of detail about how to implement the feature, but very, very rarely do you find an answer to the question "What problem does this feature solve?" To the author of the document, and presumably to the immediate intended audience, this question has already been answered. &lt;br /&gt;&lt;br /&gt;Ward makes a particularly salient point about how this type of information becomes less obvious, hence more necessary, as a document goes out to a wider and wider audience:&lt;blockquote&gt;As the design trickles out from the original conception to the organization as a whole, the requirements for communicating with each new audience become broader. It is rarely necessary to take a low-level design document to a customer, but it is often helpful to have the requirements in a form that is both understandable to a diverse audience and written in a way that can appeal to the audience at many levels.&lt;/blockquote&gt;&lt;img src="Images/Ripples.jpg" width="203" height="90" align="right" style="padding:10px;"&gt; [&lt;a href='http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2060'&gt;more&lt;/a&gt;]</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>writing,aspnet</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2060</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2060</guid>
      <pubDate>Sat, 08 Nov 2008 18:39:37 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2060</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2060</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2060</wfw:commentRss>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>How I broke my app with UpdatePanel controls</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2057</link>
      <description>As with so many things, it also started out so simple. I wanted to use &lt;strong&gt;UpdatePanel&lt;/strong&gt; controls to throw a little AJAX-ification onto one of my blog management pages. (Specifically, the blog entry page.) In fact, it started even simpler than that.  &lt;br /&gt;&lt;br /&gt;I wrote my blog-entry page as a quick-and-dirty, and in the way long-ago days before we had again learned to love JavaScript. I enter text in the textbox. When I want to see what it will look like, I click a Preview button. This hides the textbox, copies the text from the textbox into a &lt;strong&gt;Label&lt;/strong&gt; control (after some formatting), and then displays the label. When I want to edit some more, I click an Edit button, the label is hidden, the textbox is rediplayed, and I bash on. In each case, I enable and disable the appropriate button -- for example, when in Preview mode, I disable the Preview button. (Don't need it, right?) A poor man's Tab control, is what it is.&lt;br /&gt;&lt;br /&gt;Edit mode:&lt;br /&gt;&lt;img src="images/BlogEntry_EditMode.jpg" width='512' height='369' /&gt;&lt;br /&gt;&lt;br /&gt;Preview mode:&lt;br /&gt;&lt;img src="images/BlogEntry_PreviewMode.jpg" width='393' height='274' /&gt;&lt;br /&gt;&lt;br /&gt;This was all happening via postbacks. As a result, when I would switch to Preview mode and back, I'd lose my place in the textbox. If the post was long (me? long posts!?), I'd have to scroll down and find my place again. Annoying.&lt;br /&gt;&lt;br /&gt;I thought that by doing asynchronous postbacks, I'd solve this problem -- no full-on re-creation of the page each time I clicked a button. So I put an &lt;strong&gt;UpdatePanel&lt;/strong&gt; control around the &lt;strong&gt;TextBox&lt;/strong&gt; and &lt;strong&gt;Label&lt;/strong&gt; controls. Like this:&lt;br /&gt;&lt;br /&gt;&lt;img src="images/BlogEntry_EditMode_Callouts.jpg" width='512' height='369' /&gt;&lt;br /&gt;&lt;br /&gt;The buttons are not in the &lt;strong&gt;UpdatePanel&lt;/strong&gt; control, because there's other junk in the way. So I specified them as triggers, like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;asp:UpdatePanel runat="server" ID="updatePanel1"&amp;gt;&lt;br /&gt;  &amp;lt;Triggers&amp;gt;&lt;br /&gt; [&lt;a href='http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2057'&gt;more&lt;/a&gt;]</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>aspnet</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2057</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2057</guid>
      <pubDate>Thu, 30 Oct 2008 22:24:15 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2057</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2057</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2057</wfw:commentRss>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Lack of practice makes imperfect</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2056</link>
      <description>Apparently it's been too long since I've played with SQL Server databases. I say this because I made a boneheaded mistake today that obliged me to spend some quality time in the debugger. &lt;br /&gt;&lt;br /&gt;Someone asked me whether I could convert the good ol' &lt;a href="http://mikepope.com/blog/DisplayBlog.aspx?permalink=1629&amp;count=no" target="_blank"&gt;cascading drop-down example&lt;/a&gt; from using an Access database to using SQL Server. My first reaction is "C'mon, how hard can it be? You just swap data sources." &lt;br /&gt;&lt;br /&gt;This is like a teenager in a horror film asking "Hey, I wonder what's in the basement?" Cue the ominous music.&lt;br /&gt;&lt;br /&gt;The hard-won wisdom of experience stays my hand from actually &lt;em&gt;replying&lt;/em&gt; "C'mon, how hard can it be?" I have to assume that if it were easy, the person wouldn't have contacted me. &lt;br /&gt;&lt;br /&gt;So I set about converting. Within seconds I see that it isn't just a matter of swapping data sources. There is the small matter of actually creating the SQL Server database to match the Access one. There are only a few tables, so it's not hard. Dee-dee-dee, zip thru that little exercise, take a bunch of defaults, there, done. &lt;br /&gt;&lt;br /&gt;Then into the code to set up new SqlDataSource controls to match the Access ones, point the drop-down list controls to the new data sources, and tweak some code. &lt;br /&gt;&lt;br /&gt;Ready? Test. Bam. &lt;a href="http://en.wikipedia.org/wiki/Yellow_Screen_of_Death#ASP.NET" target="_blank"&gt;YSOD&lt;/a&gt;. Fail. &lt;br /&gt;&lt;br /&gt;&lt;img src="images/CascadingDropDown_YSOD.jpg" width='596' height='224' /&gt;&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;Update 28 Oct&lt;/b&gt; I updated the screenshot -- was showing the wrong error, oops. Error about the error.)&lt;br /&gt;&lt;br /&gt;I eventually track this down to a problem in the markup, here:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;asp:DropDownList ID="DropDownList1" &lt;br /&gt;  runat="server" &lt;br /&gt;  AutoPostBack="True" &lt;br /&gt;  DataSourceID="ManufacturersDataSource_SQL" &lt;br /&gt;  DataTextField="Manufacturer"&lt;br /&gt;  DataValueField="Manufacturer" &lt;br /&gt;  &lt;b&gt; [&lt;a href='http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2056'&gt;more&lt;/a&gt;]</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>aspnet</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2056</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2056</guid>
      <pubDate>Tue, 28 Oct 2008 23:32:45 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2056</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2056</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2056</wfw:commentRss>
      <slash:comments>2</slash:comments>
    </item>
    <item>
      <title>Stack Overflow and developer documentation</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2028</link>
      <description>Stack Overflow, the much-anticipated project put together by &lt;a href="http://www.codinghorror.com/blog/archives/001169.html" target="_blank"&gt;Jeff Atwood&lt;/a&gt; and &lt;a href="http://www.joelonsoftware.com/items/2008/09/15.html" target="_blank"&gt;Joel Spolsky&lt;/a&gt;, went live a couple of days ago. The site brings the known vectors for crowdsourcing to developer documentation, combining traditional support forums with wikis and social bookmarking to produce "a collaboratively edited question and answer site for programmers — regardless of platform or language."&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-left:50px"&gt;&lt;a href="http://stackoverflow.com" target="_blank"&gt;&lt;img src="images/StackOverflow.gif" width='640' height='497' /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Based on the sorts of discussions that have already been posted, it seems that the likelihood of me being able to answer an actual programming question is slim. The level of discourse is not, as yet anyway, equivalent to the sprawling playground that is the ASP.NET &lt;a href="http://forums.asp.net/" target="_blank"&gt;forums&lt;/a&gt;, whose (currently) 2,166,075 posts include a sizable number of discussions by and for newbies -- often, in fact, including some of those proverbial stupid questions that your teacher said did not exist.[&lt;a href='#stackoverflow1'&gt;1&lt;/a&gt;] And thank goodness, beacuse some of those I can actually respond to.&lt;br /&gt;&lt;br /&gt;But I am taking an interest in posts that bear the tag &lt;a href="http://stackoverflow.com/questions/tagged/documentation" target="_blank"&gt;documentation&lt;/a&gt;, of which there are about 50 to date. &lt;br /&gt;&lt;br /&gt;It is gratifying, for a start, that there are questions about &lt;a href="http://stackoverflow.com/questions/28072/what-languages-have-the-bestworst-documentation-and-support-communities" target="_blank"&gt;which is the best documentation&lt;/a&gt; (sort of), and better yet, quite a few questions about how to create documentation. &lt;br /&gt;&lt;br /&gt;Some threads that I am particularly interested in right now are these:&lt;ul&gt;&lt;li&gt; [&lt;a href='http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2028'&gt;more&lt;/a&gt;]</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>aspnet,writing</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2028</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2028</guid>
      <pubDate>Tue, 16 Sep 2008 08:24:03 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2028</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2028</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2028</wfw:commentRss>
      <slash:comments>2</slash:comments>
    </item>
    <item>
      <title>MSDN search upgrade</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2024</link>
      <description>Excellent. Announcement today when you do an &lt;a href="http://search.msdn.microsoft.com/Default.aspx?query=asp.net&amp;brand=msdn&amp;locale=en-us&amp;refinement=" target="_blank"&gt;MSDN search&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;img src="images/MSDNSearchUpgrade.jpg" width='698' height='227' /&gt;</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>aspnet,technology</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2024</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2024</guid>
      <pubDate>Tue, 09 Sep 2008 11:51:20 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2024</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2024</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2024</wfw:commentRss>
      <slash:comments>1</slash:comments>
    </item>
    <item>
      <title>More on MSDN</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2015</link>
      <description>In the wake of my &lt;a href="http://mikepope.com/blog/DisplayBlog.aspx?permalink=2011" target="_blank"&gt;recent yackery&lt;/a&gt; about undocumentation on MSDN, Seth drew my attention to some &lt;a href="https://www.blogger.com/comment.g?blogID=7555958&amp;postID=9092007245026274354" target="_blank"&gt;comments on a mini-microsoft blog post&lt;/a&gt;. As usual, the comment threads, which are huge, veer far, far off topic. Interspersed among all the other sniping, the comment thread in question addresses the usefulness of documentation on &lt;a href="http://msdn.microsoft.com" target="_blank"&gt;MSDN&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;This is the initial complaint:&lt;blockquote&gt;... the MSDN documentation continues to be so thunderingly useless. A 10-second Google search almost always finds blogs or articles far superior to the cruft in MSDN.&lt;/blockquote&gt;Another commenter joins the fray:&lt;blockquote&gt;MSDN is the sole reason why Open Source hasn't yet completely taken over as a development platform. They don't have proper documentation for stuff and we do, so when you develop something you KNOW you'll be able to figure things out quickly, either from MSDN or from people who have read MSDN and created their own samples (where else do you think they got their knowledge from?).&lt;br /&gt;&lt;br /&gt;I could name quite a few things Microsoft puts out that are "useless", but MSDN is not among them.&lt;/blockquote&gt;There is some back-and-forth about MSDN, which mostly gets into the search capabilities of MSDN. Returning to content, someone who is probably a writer in the Developer Division observes:&lt;blockquote&gt;... when a single writer is responsible for maintaining 3500 pages of documentation, content will usually suck to one degree or another. Pick about 10 tech books on your shelf. That's the amount of text some writers are responsible for keeping up to date.&lt;br /&gt;&lt;br /&gt;They'd love to write samples or dig into obscure failure modes of APIs, but just don't have the time.&lt;/blockquote&gt;This is answered by the now-familiar request to make documentation into a wiki:&lt;blockquote&gt; [&lt;a href='http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2015'&gt;more&lt;/a&gt;]</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>writing,aspnet</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2015</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2015</guid>
      <pubDate>Tue, 12 Aug 2008 08:49:07 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2015</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2015</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2015</wfw:commentRss>
      <slash:comments>6</slash:comments>
    </item>
    <item>
      <title>Docs, undocumentation, and the DailyWTF</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2011</link>
      <description>An &lt;a href="http://thedailywtf.com/Articles/Connect-Over-What!.aspx" target="_blank"&gt;ignominious appearance&lt;/a&gt; on the DailyWTF recently got one of our documentation topics some undue attention. Alas. The &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.gridtablesfactory_members(VS.85).aspx" target="_blank"&gt;topic in question&lt;/a&gt; pertains to what around here we call an "internal only" type or member. Or as is stated more formally, it's a topic about a class that "supports the .NET Framework infrastructure and is not intended to be used directly from your code." This is boilerplate, and many topics feature this fascinating information. In this particular case, tho, and for reasons not entirely clear, someone added the text "This type does nothing meaningful." Result: mockery. Ouch.&lt;br /&gt;&lt;br /&gt;&lt;img src="images/cNETAPIDocs_useless.jpg" width='600' height='195' /&gt;&lt;br /&gt;&lt;br /&gt;Couple of things here. First and most general, why do topics like this even exist? They obviously have very little useful information. Scott Swigart &lt;a href="http://swigartconsulting.blogs.com/tech_blender/2005/07/the_undocumente.html" target="_blank"&gt;once&lt;/a&gt; memorably called this sort of thing "undocumentation." (This would be amusing, other than that I don't think Scott was particularly amused at the time.)&lt;br /&gt;&lt;br /&gt;The short answer is: because they must. We are obligated to have at least some documentation (or undocumentation, if you will) for every single type and member that is not explicitly set to private. To put it another way, if you can use .NET reflection to see that a member exists, we have to have something in the docs for it. Why? Well, think back on history and imagine the consequences if we &lt;em&gt;didn't&lt;/em&gt; [&lt;a href='http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2011'&gt;more&lt;/a&gt;]</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>writing,editing,aspnet</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=2011</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2011</guid>
      <pubDate>Wed, 06 Aug 2008 14:37:12 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=2011</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=2011</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=2011</wfw:commentRss>
      <slash:comments>2</slash:comments>
    </item>
    <item>
      <title>Tag cloud control</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=1991</link>
      <description>I recently decided to implement a &lt;a href="http://en.wikipedia.org/wiki/Tag_cloud" target="_blank"&gt;tag cloud&lt;/a&gt;. I'm not quite sure why this grabbed me; I don't pay that much attention to them my own self. But the idea of how to do it interested me, so I gave it a bash as an ASP.NET custom Web server control[&lt;a href='#tagcloudcontrol1'&gt;1&lt;/a&gt;]. I don't need a tag cloud control, and I bet that if you need one, you already have one. Basically, this was just a fun exercise for me. &lt;br /&gt;&lt;br /&gt;Demo here: &lt;a href="http://www.mikepope.com/blog/fun/Test_TagCloudControl.aspx" target="_blank"&gt;Tag Cloud Control Demo&lt;/a&gt;&lt;br /&gt;Source code here: &lt;a href="http://www.mikepope.com/blog/fun/TagCloudControl_vb.htm" target="_blank"&gt;TagCloud control source code&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In a tag cloud, the various tags are displayed in a font size that's proportional to how many times the tag is used. A tag that's used a lot is big; a tag that's seldom used is small. Who knew, there are various ways to calculate this spread of font sizes. I ended up using an algorithm that I think (?) I found on a PHP site, I forget exactly. &lt;br /&gt;&lt;br /&gt;This is what it looks like. This isn't live; to see a live one, go to the &lt;a href="http://www.mikepope.com/blog/fun/Test_TagCloudControl.aspx" target="_blank"&gt;demo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;img src="images/TagCloudSample.jpg" width='331' height='188' /&gt;&lt;br /&gt;&lt;br /&gt;The control feeds off a list of items that contain a tag name and a tag count. How this list is generated would be, as they say, left as an exercise for the reader. I wrote the code so that it expects something that can be cast to &lt;strong&gt;IEnumerable&lt;/strong&gt;. I played with it two ways. One was to create instances of a &lt;strong&gt;TagItem&lt;/strong&gt; class (conveniently provided by myself) and stick them into a &lt;strong&gt;List&amp;lt;T&amp;gt;&lt;/strong&gt; generic list (VB: &lt;strong&gt;List (Of T)&lt;/strong&gt;) or an &lt;strong&gt;ArrayList&lt;/strong&gt; object, both of which worked. I also was able to successfully give it a &lt;strong&gt;DataView&lt;/strong&gt; [&lt;a href='http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=1991'&gt;more&lt;/a&gt;]</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>aspnet</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=1991</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=1991</guid>
      <pubDate>Tue, 08 Jul 2008 23:37:27 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=1991</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=1991</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=1991</wfw:commentRss>
      <slash:comments>4</slash:comments>
    </item>
    <item>
      <title>A slightly less trivial browser history example</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=1989</link>
      <description>One of the ASP.NET features that will be officially mainstreamed in the .NET Framework 3.5 SP1 release is &lt;a href="http://quickstarts.asp.net/3-5-extensions/ajax/Ajax/BroswerHistoryOnServer.aspx" target="_blank"&gt;browser history&lt;/a&gt;. (&lt;a href="http://www.asp.net/learn/3.5-SP1/video-242.aspx" target="_blank"&gt;Video&lt;/a&gt;) (The feature has been available in Futures releases and in the &lt;a href="http://www.asp.net/downloads/3.5-SP1/default.aspx" target="_blank"&gt;SP1 beta&lt;/a&gt; for a while.) In my editing role I keep crossing paths with the browser history feature, and in my limited exposure to it, I kept thinking that the examples I was seeing were sort of trivial.[&lt;a href='#aslightlylesstrivialbrowserhistoryexample1'&gt;1&lt;/a&gt;] In particular, the examples I was seeing either a) showed history for a single state change or b) in worse cases, were examples that didn't really require the feature at all. So I played with it a while until I was satisfied that I got the gist of it. &lt;br /&gt;&lt;br /&gt;Lightning explanation for those who don't know this feature. AJAX-enabled pages usually perform asynchronous postbacks that result in a change to the page. You click a check box; async postback; page changes. Click button; async postback; page changes. However, the browser doesn't know about these async postbacks. If you now click the Back button, the browser unloads the current page, pops a URL off the history stack, and goes to that URL. What you probably wanted, tho, was to just return to the previous &lt;em&gt;state&lt;/em&gt;, not to the previous &lt;em&gt;page&lt;/em&gt;. &lt;br /&gt;&lt;br /&gt;In brief, browser history works like this: during the async postback, you call the &lt;strong&gt;AddHistoryPoint&lt;/strong&gt; method of the &lt;strong&gt;ScriptManager&lt;/strong&gt; control. In the call, you pass a name/value pair, where the value is some value that you want to save. Like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;ScriptManager1.AddHistoryPoint("ListBox1", ListBox1.SelectedValue, title)&lt;/pre&gt; [&lt;a href='http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=1989'&gt;more&lt;/a&gt;]</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>aspnet</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=1989</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=1989</guid>
      <pubDate>Thu, 03 Jul 2008 15:52:13 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=1989</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=1989</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=1989</wfw:commentRss>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>What version &lt;i&gt;am&lt;/i&gt; I using?</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=1987</link>
      <description>I'm running ASP.NET version 3.5. Or am I? The evidence is a little ... confusing. Let's have a look.&lt;br /&gt;&lt;br /&gt;If I open VWD 2008 Express and click &lt;strong&gt;Help &gt; About&lt;/strong&gt;, I get this:&lt;br /&gt;&lt;br /&gt;&lt;img src="images/VWD_Help_About.jpg" width='545' height='188' /&gt;&lt;br /&gt;&lt;br /&gt;The &lt;strong&gt;New Web Site&lt;/strong&gt; dialog box says this:&lt;br /&gt;&lt;br /&gt;&lt;img src="images/VWD_NewWebSite_35.JPG" width='384' height='301' /&gt;&lt;br /&gt;&lt;br /&gt;The &lt;strong&gt;Property Pages&lt;/strong&gt; dialog box for a Web site tells you:&lt;br /&gt;&lt;br /&gt;&lt;img src="images/VWD_WebSiteProperties_35.JPG" width='548' height='246' /&gt;&lt;br /&gt;&lt;br /&gt;Suppose, however, that I have a peek at the headers sent by ASP.NET when I request a page (thanks here to &lt;a href="http://www.fiddler2.com/fiddler2/" target="_blank"&gt;Fiddler&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;img src="images/Fiddler2_XASPNET_Header.JPG" width='305' height='230' /&gt;&lt;br /&gt;&lt;br /&gt;That's odd, no?&lt;br /&gt;&lt;br /&gt;Or the even-more-confusing issue of where to find the .NET Framework tools. If you read about &lt;code&gt;aspnet_regsql.exe&lt;/code&gt; &lt;a href="http://msdn.microsoft.com/en-us/library/ms229862.aspx" target="_blank"&gt;on MSDN&lt;/a&gt;, you'll find this:&lt;br /&gt;&lt;br /&gt;&lt;img src="images/ASPNET_REGSQL_35.JPG" width='630' height='189' /&gt;&lt;br /&gt;&lt;br /&gt;So we go to &lt;code&gt;%windir%\Microsoft.NET\Framework\&lt;/code&gt;:&lt;br /&gt;&lt;br /&gt;&lt;img src="images/WinExplorer_NET35.JPG" width='565' height='251' /&gt;&lt;br /&gt;&lt;br /&gt;You can hunt all you want in &lt;code&gt;v3.0&lt;/code&gt; or &lt;code&gt;v3.5&lt;/code&gt;, but you won't find &lt;code&gt;aspnet_regsql.exe&lt;/code&gt;. I'll save you a teeny bit of trouble and tell you that you &lt;em&gt;will&lt;/em&gt; find it, tho, in &lt;code&gt;%windir%\Microsoft.NET\Framework\v2.0.50727&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;So am I running ASP.NET 3.5 or ASP.NET 2.0?&lt;br /&gt;&lt;br /&gt;Yes.&lt;br /&gt;&lt;br /&gt;The issue of what version of the CLR is running has been &lt;a href="http://www.danielmoth.com/Blog/2007/05/clr-v20-remains-at-same-version.html" target="_blank"&gt;addressed before&lt;/a&gt; (&lt;a href="http://www.danielmoth.com/Blog/2007/06/net-framework-35.html" target="_blank"&gt;more&lt;/a&gt; [&lt;a href='http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=1987'&gt;more&lt;/a&gt;]</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>aspnet</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=1987</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=1987</guid>
      <pubDate>Mon, 30 Jun 2008 18:08:37 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=1987</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=1987</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=1987</wfw:commentRss>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Caching rendered control output</title>
      <link>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=1975</link>
      <description>During the &lt;a href="http://mikepope.com/blog/DisplayBlog.aspx?permalink=1972" target="_blank"&gt;recent discussion here&lt;/a&gt; about view state errors, I examined the view state that was being saved for the very page you're looking at. It was running about 7K, which actually isn't that terrible. But I wondered how much I could reduce that. &lt;br /&gt;&lt;br /&gt;You don't need to save view state if you're going to regenerate the control state on each postback anyway. So for my first effort, I disabled view state for a couple of the boxes you see on the left (they're user controls) -- the blog roll and the 25-most viewed entries. I also commented out the &lt;code&gt;If&amp;nbsp;Page.IsPostBack&lt;/code&gt; test in the logic for those so that they'd rebind on every postback. &lt;br /&gt;&lt;br /&gt;At that point, I'd made a questionable tradeoff. I whacked about 50% off the size of view state, that's good. But I'd added a, you know, cognitive load onto server processing by making the user controls do all their data query and binding each time. To mitigate this somewhat, I cached the data that these guys display; this at least eliminated database access on each postback (for these controls).&lt;br /&gt;&lt;br /&gt;It's not at all clear to me that this is a good exchange. I don't have (I don't think I have) a precise way to test the effect of this change. I think the real test would need to put the server under load, because it's at least partly a question of scaling -- by adding processing overhead to the server, I've reduced its ability to respond. How much? That's the question, innit.&lt;br /&gt;&lt;br /&gt; [&lt;a href='http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=1975'&gt;more&lt;/a&gt;]</description>
      <author>Mike Pope&lt;mike@mikepope.com&gt;</author>
      <dc:creator>mike pope</dc:creator>
      <category>aspnet</category>
      <wfw:comment>http://www.mikepope.com/blog/AddComment.aspx?blogID=1975</wfw:comment>
      <guid isPermaLink="true">http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=1975</guid>
      <pubDate>Sat, 31 May 2008 21:25:39 GMT</pubDate>
      <source>http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=1975</source>
      <trackback:ping>http://www.mikepope.com/blog/BlogTrackback.aspx?id=1975</trackback:ping>
      <wfw:commentRss>http://www.mikepope.com/blog/BlogCommentsFeed.rss?id=1975</wfw:commentRss>
      <slash:comments>1</slash:comments>
    </item>
  </channel>
</rss>