<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>.NETicated</title><link>http://www.platinumbay.com/blogs/dotneticated/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/dotneticated" type="application/rss+xml" /><item><title>Community Radio Episode Two</title><link>http://feedproxy.google.com/~r/dotneticated/~3/Xj46visH2QA/community-radio-episode-two.aspx</link><pubDate>Fri, 19 Jun 2009 08:38:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:808</guid><dc:creator>Steve</dc:creator><slash:comments>5</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/06/19/community-radio-episode-two.aspx#comments</comments><description>&lt;p&gt;I’m proud to announce that episode two of Community Radio has been published to &lt;a href="http://live.ineta.org/audio"&gt;http://live.ineta.org/audio&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In this episode, Steve talks with Heather Kostes, Emily Freet, and Nicole Moser about their roles at Microsoft, the MVP program, MVP benefits, becoming an MVP, karaoke, and more. Narrated by &lt;a href="http://twitter.com/JohnBlumenauer" target="_blank"&gt;John Blumenauer&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;As always, your feedback is greatly appreciated.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=808" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Xj46visH2QA:66nG0RRe3dQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=Xj46visH2QA:66nG0RRe3dQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Xj46visH2QA:66nG0RRe3dQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=Xj46visH2QA:66nG0RRe3dQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Xj46visH2QA:66nG0RRe3dQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Xj46visH2QA:66nG0RRe3dQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=Xj46visH2QA:66nG0RRe3dQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Xj46visH2QA:66nG0RRe3dQ:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Xj46visH2QA:66nG0RRe3dQ:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Xj46visH2QA:66nG0RRe3dQ:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Xj46visH2QA:66nG0RRe3dQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/Xj46visH2QA" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/MVP/default.aspx">MVP</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Community+Radio/default.aspx">Community Radio</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/INETA+Live/default.aspx">INETA Live</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/06/19/community-radio-episode-two.aspx</feedburner:origLink></item><item><title>European Union Says No to Free Dessert</title><link>http://feedproxy.google.com/~r/dotneticated/~3/9GzswyHn5-0/europe-says-no-to-free-dessert.aspx</link><pubDate>Sun, 14 Jun 2009 22:42:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:799</guid><dc:creator>Steve</dc:creator><slash:comments>3</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/06/14/europe-says-no-to-free-dessert.aspx#comments</comments><description>&lt;p&gt;As reported all over the web this week, Microsoft has decided to ship Windows 7 in Europe without Internet Explorer. For a long time, the EU has been complaining that Microsoft has been using their dominant position to hawk IE on unsuspecting computer users.&lt;/p&gt;  &lt;p&gt;Horseradish!&lt;/p&gt;  &lt;p&gt;Let’s bring this discussion back across the pond for a second, and look at new home construction. The Department of Justice had a quarrel with Microsoft awhile back over a similar matter. Of course, if they were really going after monopolies they would go after the micro-monopolies of new home builders for charging egregious fees for options. Take for instance the elegant and simple recessed light. The last time I bought a new house the builder wanted $125 for every single one I added. A quick trip to Home Depot confirmed that the hardware costs less than $10, and wiring was equally inexpensive. I wanted to put their lights out.&lt;/p&gt;  &lt;p&gt;And what about the auto industry that forces you to choose from their tires, or their radios, or their floormats. Shouldn’t they be spanked? And what about government in general? Shouldn’t I be able to choose a DMV that offers better service if I want to? I think my four year old nephew could do that, and I’d gladly pay him instead.&lt;/p&gt;  &lt;p&gt;But let’s take a step back for a second and remember that there is a major difference between these comparisons and Internet Explorer. Internet Explorer is free. Free as in no charge. Free as in ‘No sir, you can keep your money’. You buy the operating system, and you get a free browser. Restaurants do the same thing; buy a meal, get a free dessert. Is the European Union really that uptight to complain about getting their dessert for free? And a dessert that can easily be replaced by downloading another browser? Maybe they don&amp;#39;t like free things and will soon consider an air tax.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=799" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9GzswyHn5-0:QZUKA6-jfHI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=9GzswyHn5-0:QZUKA6-jfHI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9GzswyHn5-0:QZUKA6-jfHI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=9GzswyHn5-0:QZUKA6-jfHI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9GzswyHn5-0:QZUKA6-jfHI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9GzswyHn5-0:QZUKA6-jfHI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=9GzswyHn5-0:QZUKA6-jfHI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9GzswyHn5-0:QZUKA6-jfHI:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9GzswyHn5-0:QZUKA6-jfHI:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9GzswyHn5-0:QZUKA6-jfHI:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9GzswyHn5-0:QZUKA6-jfHI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/9GzswyHn5-0" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Personal+_1320_+Off+Topic/default.aspx">Personal – Off Topic</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/06/14/europe-says-no-to-free-dessert.aspx</feedburner:origLink></item><item><title>Community Radio Episode One</title><link>http://feedproxy.google.com/~r/dotneticated/~3/Qa2O-KuslVk/community-radio-episode-one.aspx</link><pubDate>Fri, 12 Jun 2009 06:45:13 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:793</guid><dc:creator>Steve</dc:creator><slash:comments>4</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/06/12/community-radio-episode-one.aspx#comments</comments><description>&lt;p&gt;I’m proud to announce that the inaugural episode of Community Radio has been published: &lt;a href="http://live.ineta.org/audio"&gt;http://live.ineta.org/audio&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In this inaugural episode, I talk with Richard, Carl and Sara about Speaker Idol, speaking at Tech-Ed, podcasting, .NET Rocks, Richard and Carl&amp;#39;s back stories, and more. Narrated by &lt;a href="http://twitter.com/csharpfritz"&gt;Jeff Fritz&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;As always, your feedback is greatly appreciated.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=793" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Qa2O-KuslVk:e0D8unWxy_4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=Qa2O-KuslVk:e0D8unWxy_4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Qa2O-KuslVk:e0D8unWxy_4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=Qa2O-KuslVk:e0D8unWxy_4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Qa2O-KuslVk:e0D8unWxy_4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Qa2O-KuslVk:e0D8unWxy_4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=Qa2O-KuslVk:e0D8unWxy_4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Qa2O-KuslVk:e0D8unWxy_4:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Qa2O-KuslVk:e0D8unWxy_4:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Qa2O-KuslVk:e0D8unWxy_4:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=Qa2O-KuslVk:e0D8unWxy_4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/Qa2O-KuslVk" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Community+Radio/default.aspx">Community Radio</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/06/12/community-radio-episode-one.aspx</feedburner:origLink></item><item><title>Results – Community Radio Narration Contest</title><link>http://feedproxy.google.com/~r/dotneticated/~3/PKTMTbsq4mM/results-community-radio-narration-contest.aspx</link><pubDate>Thu, 11 Jun 2009 00:01:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:789</guid><dc:creator>Steve</dc:creator><slash:comments>2</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/06/10/results-community-radio-narration-contest.aspx#comments</comments><description>&lt;p&gt;The &lt;a href="http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/24/community-radio-narration-contest.aspx" target="_blank"&gt;contest&lt;/a&gt; deadline has come and gone, and I received four submissions. After reviewing the submission I have determined that they were all great, so whoever sends me $500 first… just kidding. I’ve decided that the only satisfactory course of action is to use them all on a rotational basis. In fact, I’ve decided to use community contributions exclusively going forward because, well, this is your radio! The first four, in no particular (though apparently alphabetical) order, are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://twitter.com/csharpfritz" target="_blank"&gt;Jeff Fritz&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://twitter.com/JohnBlumenauer" target="_blank"&gt;John Blumenauer&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://twitter.com/fallenrogue" target="_blank"&gt;Leon Gersing&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Michael Diiorio&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Would you like to introduce an episode of Community Radio? Record yourself in high-quality MP3 or WAV format speaking the following phrases. I look forward to your submissions!&lt;/p&gt;  &lt;h4&gt;Intro:&lt;/h4&gt;  &lt;p&gt;&amp;quot;[Hey, Hi, Howdy, Hey Y’all, etc.], this is [your name] welcoming you to Community Radio: connecting the developer community everywhere. Community Radio is powered by INETA Live and hosted by Steve Andrews: Microsoft MVP for Visual Studio Team System, Director of Technology for INETA North America, and all-around Community Fanatic. And now… to the communitymobile! Enjoy the show!&amp;quot;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;Note: In the second to last sentence, it&amp;#39;s communitymobile, as in &amp;quot;To the Batmobile.&amp;quot;&lt;/i&gt;&lt;/p&gt;  &lt;h4&gt;Outro:&lt;/h4&gt;  &lt;p&gt;&amp;quot;Thanks for listening to Community Radio: powered by INETA Live, and hosted by Steve Andrews. If you enjoyed this episode, pass us along to your friends and colleagues and check out our podcast archives at live.ineta.org. I’m [your name], join us next time for another edition of... Community Radio.&amp;quot;&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=789" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=PKTMTbsq4mM:WCsFpm-IfxY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=PKTMTbsq4mM:WCsFpm-IfxY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=PKTMTbsq4mM:WCsFpm-IfxY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=PKTMTbsq4mM:WCsFpm-IfxY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=PKTMTbsq4mM:WCsFpm-IfxY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=PKTMTbsq4mM:WCsFpm-IfxY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=PKTMTbsq4mM:WCsFpm-IfxY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=PKTMTbsq4mM:WCsFpm-IfxY:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=PKTMTbsq4mM:WCsFpm-IfxY:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=PKTMTbsq4mM:WCsFpm-IfxY:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=PKTMTbsq4mM:WCsFpm-IfxY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/PKTMTbsq4mM" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Community+Radio/default.aspx">Community Radio</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/06/10/results-community-radio-narration-contest.aspx</feedburner:origLink></item><item><title>Community Tour 2010</title><link>http://feedproxy.google.com/~r/dotneticated/~3/UJ3BdVr9fpU/community-tour-2010.aspx</link><pubDate>Tue, 09 Jun 2009 21:43:43 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:786</guid><dc:creator>Steve</dc:creator><slash:comments>2</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/06/09/community-tour-2010.aspx#comments</comments><description>&lt;p&gt;I think most folks know that I tend to speak at developer events from time to time. Actually in 2008 I gave 48 presentations at 32 events. My goal for 2009 is 52 events and I have 44 confirmed so far. Next year though I thought I’d take it up another notch. No, I’m not going for 72 events as some have suggested, nor am I retiring. Rather, I’m going on a North American tour and I’m currently on the hunt for a class A diesel motor home.&lt;/p&gt;  &lt;p&gt;&lt;img title="" style="border-top-width:0px;display:block;border-left-width:0px;float:none;border-bottom-width:0px;margin-left:auto;margin-right:auto;border-right-width:0px;" height="129" alt="" src="http://www.platinumbay.com/blogs/postimages/CommunityTour2010_1118D/CT2010CoachMockup.gif" width="380" border="0" /&gt;&lt;/p&gt;  &lt;h6 align="center"&gt;&lt;em&gt;Note: Image for dramatization only. Logos are for illustrative purposes and do not signify support from any organization. Also, CommunityTour.com is sadly already taken.&lt;/em&gt;&lt;/h6&gt;  &lt;p&gt;As part of this tour, I am organizing and planning a number of programs, including:&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;         &lt;p align="right"&gt;&lt;strong&gt;Community Events:&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td&gt;continuing to speak at user groups, code camps, and other developer events.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;         &lt;p align="right"&gt;&lt;strong&gt;Guest Lecturing:&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td&gt;engaging with college and university students about real-world programming, best practices, etc.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;         &lt;p align="right"&gt;&lt;strong&gt;Community Camp:&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td&gt;teaching up-and-coming influentials about speaking, presentations, writing, blogging, the MVP program, the INETA Speakers Bureau, and more.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;         &lt;p align="right"&gt;&lt;strong&gt;Volunteering:&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td&gt;continuing the idea of &lt;a href="http://www.GeekFoodDrive.com"&gt;www.GeekFoodDrive.com&lt;/a&gt; and &lt;a href="http://www.GeekGive.org"&gt;www.GeekGive.org&lt;/a&gt; by helping to organize volunteer opportunities at community events.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;         &lt;p align="right"&gt;&lt;strong&gt;Mobile Code Camp:&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td&gt;bringing the code camp idea to smaller and under-represented areas in the US where there aren’t currently any community events&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;         &lt;p align="right"&gt;&lt;strong&gt;Community Radio:&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td&gt;talking with folks along the way, tapping the pockets of knowledge and sharing that knowledge with the community.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;         &lt;p align="right"&gt;&lt;strong&gt;Community TV:&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td&gt;video interviews with community influentials.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;         &lt;p align="right"&gt;&lt;strong&gt;INETA Live:&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td&gt;recording INETA Live webcasts from local technologists on the road.&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h5&gt;Community Organizers&lt;/h5&gt;  &lt;p&gt;If you would like the Community Bus at one of your events next year, have feedback, are interested in organizing specific programs in your area, or you would be interested in riding along, please &lt;a href="http://www.platinumbay.com/blogs/dotneticated/contact.aspx" target="_blank"&gt;contact me&lt;/a&gt;.&lt;/p&gt;  &lt;h5&gt;Sponsors&lt;/h5&gt;  &lt;p&gt;To learn more about sponsoring the tour, please request a Community Tour 2010 Sponsorship Prospectus from the &lt;a href="http://www.platinumbay.com/blogs/dotneticated/contact.aspx" target="_blank"&gt;Contact page&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=786" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=UJ3BdVr9fpU:9aDIBNDMrlo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=UJ3BdVr9fpU:9aDIBNDMrlo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=UJ3BdVr9fpU:9aDIBNDMrlo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=UJ3BdVr9fpU:9aDIBNDMrlo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=UJ3BdVr9fpU:9aDIBNDMrlo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=UJ3BdVr9fpU:9aDIBNDMrlo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=UJ3BdVr9fpU:9aDIBNDMrlo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=UJ3BdVr9fpU:9aDIBNDMrlo:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=UJ3BdVr9fpU:9aDIBNDMrlo:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=UJ3BdVr9fpU:9aDIBNDMrlo:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=UJ3BdVr9fpU:9aDIBNDMrlo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/UJ3BdVr9fpU" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/blog/default.aspx">blog</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/code+camp/default.aspx">code camp</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Speaking/default.aspx">Speaking</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Community/default.aspx">Community</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Community+Radio/default.aspx">Community Radio</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/INETA+Live/default.aspx">INETA Live</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/06/09/community-tour-2010.aspx</feedburner:origLink></item><item><title>Community Radio Narration Contest</title><link>http://feedproxy.google.com/~r/dotneticated/~3/ztEvV9pz_vQ/community-radio-narration-contest.aspx</link><pubDate>Sun, 24 May 2009 23:26:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:772</guid><dc:creator>Steve</dc:creator><slash:comments>2</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/24/community-radio-narration-contest.aspx#comments</comments><description>&lt;p&gt;I started recording episodes of Community Radio at Microsoft Tech-Ed 2009 in Los Angeles, California. Since coming back home, I’ve been hard at work editing these episodes and creating the intro/outro music. There is still one element missing however, the narrator. That’s where you come in.&lt;/p&gt;  &lt;p&gt;I’m holding a contest to find the Community Radio narrator. To enter, record yourself speaking the below intro and outro phrases in the highest quality format (either MP3 or WAV). The recorded intro and outro must be no longer than 27 seconds each. To submit your entry, send an email to &lt;a href="mailto:steve@platinumbay.com?subject=Submission:%20Community%20Radio%20Narration%20Contest" target="_blank"&gt;Steve&lt;/a&gt; with a link to download your recordings. Entries must be received by 11:59 PM eastern time on Friday, May 29th.&lt;/p&gt;  &lt;h4&gt;Intro:&lt;/h4&gt;  &lt;p&gt;&amp;quot;Welcome to Community Radio: connecting the developer community everywhere. Community Radio is powered by INETA Live, located on the web at live.ineta.org, and hosted by Steve Andrews: Microsoft MVP for Visual Studio Team System, Director of Technology for INETA North America, and all-around Community Fanatic. And now… to the communitymobile! Enjoy the show!&amp;quot;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;&lt;i&gt;Note: In the second to last sentance, it&amp;#39;s communitymobile, as in &amp;quot;To the Batmobile.&lt;/i&gt;&lt;/font&gt;&amp;quot;&lt;br /&gt;&lt;/p&gt;  &lt;h4&gt;Outro:&lt;/h4&gt;  &lt;p&gt;&amp;quot;Thanks for listening to Community Radio: powered by INETA Live and hosted by Steve Andrews. If you enjoyed this episode, pass us along to your friends and colleagues and check out our podcast archives at live.ineta.org. Narration by [your name]. Join us next time for another edition of... Community Radio.&amp;quot;&lt;/p&gt;  &lt;p&gt;Good luck!&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=772" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ztEvV9pz_vQ:b_RGlY-l-Fo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=ztEvV9pz_vQ:b_RGlY-l-Fo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ztEvV9pz_vQ:b_RGlY-l-Fo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=ztEvV9pz_vQ:b_RGlY-l-Fo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ztEvV9pz_vQ:b_RGlY-l-Fo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ztEvV9pz_vQ:b_RGlY-l-Fo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=ztEvV9pz_vQ:b_RGlY-l-Fo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ztEvV9pz_vQ:b_RGlY-l-Fo:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ztEvV9pz_vQ:b_RGlY-l-Fo:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ztEvV9pz_vQ:b_RGlY-l-Fo:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ztEvV9pz_vQ:b_RGlY-l-Fo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/ztEvV9pz_vQ" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/contest/default.aspx">contest</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Community+Radio/default.aspx">Community Radio</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/24/community-radio-narration-contest.aspx</feedburner:origLink></item><item><title>WinFormsMVC</title><link>http://feedproxy.google.com/~r/dotneticated/~3/hruQ1kaBT1o/winformsmvc.aspx</link><pubDate>Wed, 20 May 2009 21:11:27 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:763</guid><dc:creator>Steve</dc:creator><slash:comments>3</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/20/winformsmvc.aspx#comments</comments><description>&lt;p&gt;I’ve been working on a Windows Forms based project recently, and I quickly became frustrated at how unwieldy it became after just a short while. I have also been working a lot with the ASP.NET MVC framework recently, and I thought this model might work better, so I set out to build a proof-of-concept of what Windows Forms MVC might look like.&lt;/p&gt;  &lt;p&gt;So far I have a very rough framework, but it’s at a point where feedback would be beneficial so I have published the project over on &lt;a title="CodePlex" href="http://www.codeplex.com" target="_blank"&gt;CodePlex&lt;/a&gt;. So go take a look, browse the source, and let me know what you think!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://winformsmvc.codeplex.com"&gt;http://winformsmvc.codeplex.com&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=763" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hruQ1kaBT1o:giK6MLFmtN4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=hruQ1kaBT1o:giK6MLFmtN4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hruQ1kaBT1o:giK6MLFmtN4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=hruQ1kaBT1o:giK6MLFmtN4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hruQ1kaBT1o:giK6MLFmtN4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hruQ1kaBT1o:giK6MLFmtN4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=hruQ1kaBT1o:giK6MLFmtN4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hruQ1kaBT1o:giK6MLFmtN4:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hruQ1kaBT1o:giK6MLFmtN4:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hruQ1kaBT1o:giK6MLFmtN4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/hruQ1kaBT1o" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Windows+Forms/default.aspx">Windows Forms</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/MVC/default.aspx">MVC</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/20/winformsmvc.aspx</feedburner:origLink></item><item><title>Training: Hands-on Introduction to ASP.NET MVC Development</title><link>http://feedproxy.google.com/~r/dotneticated/~3/DKgwJqcqsYM/training-hands-on-introduction-to-asp-net-mvc-development.aspx</link><pubDate>Tue, 19 May 2009 01:02:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:761</guid><dc:creator>Steve</dc:creator><slash:comments>12</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/18/training-hands-on-introduction-to-asp-net-mvc-development.aspx#comments</comments><description>&lt;p&gt;Registration is now open for this four hour course taking place on May 29th, 2009 at the Desmond Hotel and Conference Center in Malvern, PA.&lt;/p&gt;  &lt;p&gt;ASP.NET MVC is a free and fully supported Microsoft framework for building web applications that use a model-view-controller pattern. Like ASP.NET Web Forms, ASP.NET MVC is built on the ASP.NET framework. The benefits of ASP.NET MVC include complete control over your HTML markup, intuitive website URLs, clear separation of concerns which results in web applications that are easier to maintain and extend over time, and testability – including support for test-driven development.&lt;/p&gt;  &lt;p&gt;This course will be led by Steve Andrews, a Microsoft MVP for Visual Studio Team System, Director of Technology for INETA North America, and founding partner of Five Velocity Partners, a consulting and training provider specializing in Application Lifecycle Management and custom application development.&lt;/p&gt;  &lt;h4&gt;Overview:&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;4 Hour Course, including lunch&lt;/li&gt;    &lt;li&gt;Instructor-Led Introduction to ASP.NET MVC Development &lt;/li&gt;    &lt;li&gt;Overview of the Strengths and Weaknesses of ASP.NET MVC from a Developer’s Perspective &lt;/li&gt;    &lt;li&gt;Overview of the Essentials of the ASP.NET MVC Object Model &lt;/li&gt;    &lt;li&gt;Opportunity for a Hands-on Lab Writing ASP.NET MVC Extensions &lt;/li&gt;    &lt;li&gt;Discussion of Unique ASP.NET Deployment Requirements and Strategies &lt;/li&gt;    &lt;li&gt;Opportunity for Questions and Answers &lt;/li&gt; &lt;/ul&gt;  &lt;table cellpadding="2" cellspacing="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;        &lt;td&gt;&lt;b&gt;Location&lt;/b&gt;&lt;/td&gt;        &lt;td&gt;&lt;b&gt;Event&lt;/b&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Friday May 29, 2009          &lt;br /&gt;9:00am -1:00pm ET&lt;/td&gt;        &lt;td&gt;Desmond Hotel &amp;amp; Conference Center          &lt;br /&gt;Malvern, PA&lt;/td&gt;        &lt;td&gt;&lt;i&gt;Hands-on Introduction to ASP.NET MVC Development&lt;/i&gt;           &lt;br /&gt;Registration Fee: $349           &lt;br /&gt;Presented By: Steve Andrews&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h4&gt;Includes&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;Bound hard-copy of the training materials&lt;/li&gt;    &lt;li&gt;USB memory stick with trainings resources including demos and labs&lt;/li&gt;    &lt;li&gt;Continental breakfast&lt;/li&gt;    &lt;li&gt;Buffet lunch&lt;/li&gt;    &lt;li&gt;High-speed internet access&lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Requirements:&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;Comfortable with ASP.NET development &lt;/li&gt;    &lt;li&gt;Understanding of the ASP.NET page lifecycle &lt;/li&gt;    &lt;li&gt;Attendees must bring their own laptop installed with:      &lt;ul&gt;       &lt;li&gt;Visual Studio 2008 SP1 Standard or greater &lt;/li&gt;        &lt;li&gt;SQL Server 2005 or 2008, Express or greater &lt;/li&gt;&lt;li&gt;ASP.NET MVC Framework version 1.0&lt;br /&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;To register for this event, please contact &lt;a href="mailto:steve@platinumbay.com?subject=Inquiry:%20Hands-on%20Introduction%20to%20ASP.NET%20MVC%20Development" target="_blank"&gt;Steve Andrews&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=761" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=DKgwJqcqsYM:JheAiS6h3Rk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=DKgwJqcqsYM:JheAiS6h3Rk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=DKgwJqcqsYM:JheAiS6h3Rk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=DKgwJqcqsYM:JheAiS6h3Rk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=DKgwJqcqsYM:JheAiS6h3Rk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=DKgwJqcqsYM:JheAiS6h3Rk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=DKgwJqcqsYM:JheAiS6h3Rk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=DKgwJqcqsYM:JheAiS6h3Rk:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=DKgwJqcqsYM:JheAiS6h3Rk:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=DKgwJqcqsYM:JheAiS6h3Rk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/DKgwJqcqsYM" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/MVC/default.aspx">MVC</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Training/default.aspx">Training</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/18/training-hands-on-introduction-to-asp-net-mvc-development.aspx</feedburner:origLink></item><item><title>Volunteering at Tech·Ed 2010 in New Orleans</title><link>http://feedproxy.google.com/~r/dotneticated/~3/u8swPqfIZxM/volunteering-at-tech-183-ed-2010-in-new-orleans.aspx</link><pubDate>Sun, 17 May 2009 20:04:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:757</guid><dc:creator>Steve</dc:creator><slash:comments>1</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/17/volunteering-at-tech-183-ed-2010-in-new-orleans.aspx#comments</comments><description>&lt;p&gt;Tech·Ed this week was tons of fun and an amazing experience! I worked several booths, interacted and networked with a large number of my peers, and enjoyed almost every moment. Needless to say I was thoroughly exhausted when I got home. One of the highlights of the week though was the Wednesday night INETA Developer Party at Chaya; thanks to Infragistics for helping to sponsor it! The food was great: sushi, great wine, delicious pastries.&lt;/p&gt;  &lt;p&gt;During the course of the night the topic of New Orleans and Tech·Ed came up, and I suggested that we fly in a day or two early and volunteer for an organization like Habitat for Humanity. The whole table was in agreement and every person said they would do it.&lt;/p&gt;  &lt;p&gt;Today, I sent an email to Habitat for Humanity inquiring about volunteering on June 5th, 2010 which is the Saturday before Tech·Ed. This is where you come in. If you are interested in arriving early for Tech·Ed 2010 to help rebuild New Orleans, please contact me so I can start to get a headcount.&lt;/p&gt;  &lt;p&gt;More information about volunteering for Habitat for Humanity can be found here: &lt;a href="http://www.habitat-nola.org/volunteer/faq.php" title="http://www.habitat-nola.org/volunteer/faq.php"&gt;http://www.habitat-nola.org/volunteer/faq.php&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=757" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u8swPqfIZxM:Sj8Rvbh9ibI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=u8swPqfIZxM:Sj8Rvbh9ibI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u8swPqfIZxM:Sj8Rvbh9ibI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=u8swPqfIZxM:Sj8Rvbh9ibI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u8swPqfIZxM:Sj8Rvbh9ibI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u8swPqfIZxM:Sj8Rvbh9ibI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=u8swPqfIZxM:Sj8Rvbh9ibI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u8swPqfIZxM:Sj8Rvbh9ibI:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u8swPqfIZxM:Sj8Rvbh9ibI:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=u8swPqfIZxM:Sj8Rvbh9ibI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/u8swPqfIZxM" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Tech+Ed/default.aspx">Tech Ed</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Community/default.aspx">Community</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/17/volunteering-at-tech-183-ed-2010-in-new-orleans.aspx</feedburner:origLink></item><item><title>Tech·Ed Visual Studio Tips with Sara Ford</title><link>http://feedproxy.google.com/~r/dotneticated/~3/an42OZIluYw/tech-183-ed-visual-studio-tips-with-sara-ford.aspx</link><pubDate>Sun, 17 May 2009 19:50:26 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:756</guid><dc:creator>Steve</dc:creator><slash:comments>1</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/17/tech-183-ed-visual-studio-tips-with-sara-ford.aspx#comments</comments><description>&lt;p&gt;While at Tech·Ed this week I had several opportunities to sit down with &lt;a title="Sara Ford&amp;#39;s Blog" href="http://blogs.msdn.com/saraford" target="_blank"&gt;Sara Ford&lt;/a&gt;, including for my new Community Radio podcast. Along the way, I learned a few new tips and tidbits of knowledge about Visual Studio.&lt;/p&gt;  &lt;h3&gt;Cycle Clipboard Ring&lt;/h3&gt;  &lt;p&gt;If you’re like me when using Visual Studio, the last block of text you copied to the clipboard is always in the back of your mind, in many cases for future use. And then you mistakenly hit Ctrl+C (Copy), and overwrite the clipboard and destroying the coding flow. No more. Instead of using Ctrl+V (Paste) to paste from the clipboard, you can use Ctrl+Shift+V, which cycles through Visual Studio’s clipboard ring. Yes, Visual Studio has a clipboard ring.&lt;/p&gt;  &lt;p&gt;In the past when I presented this tip folks wanted to know how large the clipboard ring is, and I didn’t know. I asked Sara this week and it’s 20 items.&lt;/p&gt;  &lt;h3&gt;File Tab Channel File Menu&lt;/h3&gt;  &lt;p&gt;There are a couple nifty tips about the File Tab Channel, which is the horizontal bar above documents that lists each document name.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.platinumbay.com/blogs/postimages/TechEdVisualStudioTipswithSaraFord_1410C/image.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="31" alt="image" src="http://www.platinumbay.com/blogs/postimages/TechEdVisualStudioTipswithSaraFord_1410C/image_thumb.png" width="314" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;First, if you right-click on a document’s tab, there are a couple new menu items added in Visual Studio 2008 that can be very useful:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Copy Full Path – Copies the full file path to the clipboard. &lt;/li&gt;    &lt;li&gt;Open Containing Folder – opens Windows Explorer to the directory containing the file. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Second, the File Tab Channel File Menu, the down arrow on the right side of the File Tab Channel, lists all the open documents. It can also be invoked from the keyboard using Ctrl+Alt+DownArrow.&lt;/p&gt;  &lt;p&gt;Lastly, and I learned this little-known tip this week, the File Tab Channel File Menu itself is state-sensitive. That is, when there are more documents than can be displayed in the space, the icon changes from &lt;a href="http://www.platinumbay.com/blogs/postimages/TechEdVisualStudioTipswithSaraFord_1410C/image_3.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="23" alt="image" src="http://www.platinumbay.com/blogs/postimages/TechEdVisualStudioTipswithSaraFord_1410C/image_thumb_3.png" width="21" border="0" /&gt;&lt;/a&gt; to &lt;a href="http://www.platinumbay.com/blogs/postimages/TechEdVisualStudioTipswithSaraFord_1410C/image_4.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="24" alt="image" src="http://www.platinumbay.com/blogs/postimages/TechEdVisualStudioTipswithSaraFord_1410C/image_thumb_4.png" width="24" border="0" /&gt;&lt;/a&gt;. This can be really handy since it isn’t always apparent how many documents are open.&lt;/p&gt;  &lt;h3&gt;Using the Find Combo Box to Set a Breakpoint&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.platinumbay.com/blogs/postimages/TechEdVisualStudioTipswithSaraFord_1410C/image_5.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;margin:0px 10px 5px 0px;border-right-width:0px;" height="30" alt="image" src="http://www.platinumbay.com/blogs/postimages/TechEdVisualStudioTipswithSaraFord_1410C/image_thumb_5.png" width="218" align="left" border="0" /&gt;&lt;/a&gt;Another little-known tip is that if you type a method name for the currently open document into the Find combo box, located in the Standard command bar, and press F9, it will set a breakpoint on that method.&lt;/p&gt;  &lt;h3&gt;More Tips&lt;/h3&gt;  &lt;p&gt;If you liked these tips you can find more in Sara’s book, “&lt;a title="Visual Studio Tips" href="http://www.amazon.com/Microsoft-Visual-Studio-Tips-Sara/dp/0735626405" target="_blank"&gt;Visual Studio Tips&lt;/a&gt;”, available now on Amazon.com. 100% of the author royalties are being donated to a scholarship fund at the local community college for residents of Waveland, MS which was destroyed by Hurricane Katrina. Microsoft is also matching her donations 100%. Go buy three or four copies!&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=756" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=an42OZIluYw:glwfQ26r2xM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=an42OZIluYw:glwfQ26r2xM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=an42OZIluYw:glwfQ26r2xM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=an42OZIluYw:glwfQ26r2xM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=an42OZIluYw:glwfQ26r2xM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=an42OZIluYw:glwfQ26r2xM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=an42OZIluYw:glwfQ26r2xM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=an42OZIluYw:glwfQ26r2xM:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=an42OZIluYw:glwfQ26r2xM:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=an42OZIluYw:glwfQ26r2xM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/an42OZIluYw" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Tips/default.aspx">Tips</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Tech+Ed/default.aspx">Tech Ed</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Sara+Ford/default.aspx">Sara Ford</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/17/tech-183-ed-visual-studio-tips-with-sara-ford.aspx</feedburner:origLink></item><item><title>INETA Live – Call for Speakers</title><link>http://feedproxy.google.com/~r/dotneticated/~3/4QN-5ErhzF0/ineta-live-call-for-speakers.aspx</link><pubDate>Mon, 04 May 2009 03:25:51 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:752</guid><dc:creator>Steve</dc:creator><slash:comments>2</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/03/ineta-live-call-for-speakers.aspx#comments</comments><description>&lt;p&gt;Want to be famous-er? Give back knowledge? Geek out with your peers? You should do an INETA Live webcast! One of my initiatives as Director of Technology for INETA is to further develop &lt;a href="http://live.ineta.org/Videos"&gt;INETA Live&lt;/a&gt;. Details on INETA Live can be found below:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;What is INETA Live?&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;INETA Live is a forum for virtual events and webcasts via Microsoft Live Meeting.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;What to Present&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Whatever you want! Speakers can present a full presentation that they may present to user groups, an intro to one of their talks, or a topic of current interest. The choice is completely up to you!&lt;/p&gt;  &lt;p&gt;&lt;b&gt;When do the webcasts happen?&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;INETA Live webcasts are typically done during the week at 12 noon or 8pm eastern time. Feel free to request other arrangements if these times do not work for you.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Hosts&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Each presentation and speaker will be introduced by a meeting host who will also serve to field audience questions to the speaker.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Recording&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;The presentation will be recorded for future viewing on INETA Live.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;What next?&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;If you are interested in doing an INETA Live presentation, please contact me. &lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=752" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4QN-5ErhzF0:kLus6cc5PoQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=4QN-5ErhzF0:kLus6cc5PoQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4QN-5ErhzF0:kLus6cc5PoQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=4QN-5ErhzF0:kLus6cc5PoQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4QN-5ErhzF0:kLus6cc5PoQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4QN-5ErhzF0:kLus6cc5PoQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=4QN-5ErhzF0:kLus6cc5PoQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4QN-5ErhzF0:kLus6cc5PoQ:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4QN-5ErhzF0:kLus6cc5PoQ:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4QN-5ErhzF0:kLus6cc5PoQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/4QN-5ErhzF0" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/INETA/default.aspx">INETA</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/INETA+Live/default.aspx">INETA Live</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/05/03/ineta-live-call-for-speakers.aspx</feedburner:origLink></item><item><title>INETA Live Webcasts: Round One</title><link>http://feedproxy.google.com/~r/dotneticated/~3/hw6Ij-qLYWY/ineta-live-webcasts-round-one.aspx</link><pubDate>Mon, 20 Apr 2009 08:15:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:745</guid><dc:creator>Steve</dc:creator><slash:comments>2</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/04/20/ineta-live-webcasts-round-one.aspx#comments</comments><description>&lt;p&gt;One of my initiatives as Director of Technology for INETA is to further develop &lt;a href="http://live.ineta.org/Videos" target="_blank"&gt;INETA Live&lt;/a&gt;. To that end, Rachel Appel and I will be hosting &lt;b&gt;five&lt;/b&gt; exciting live webcasts this month on Live Meeting, all from INETA speakers. Details below, and remember to stay tuned for more exciting content from INETA Live. If you are interested in doing a live webcast on INETA Live, please contact me.&lt;/p&gt;
  
&lt;p&gt;&lt;i&gt;* All times are Eastern US/Canada &lt;/i&gt;    &lt;br /&gt;&lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://www.platinumbay.com/blogs/postimages/INETALiveWebcastsRoundOne_3109/image.png"&gt;&lt;img src="http://www.platinumbay.com/blogs/postimages/INETALiveWebcastsRoundOne_3109/image_thumb.png" title="image" style="border-width:0px;margin:0px 15px 0px 0px;display:inline;" alt="image" width="64" align="left" border="0" height="64" /&gt;&lt;/a&gt;&lt;span style="font-weight:bold;font-size:1.2em;"&gt;Pete Brown – A Lap Around Silverlight 3&lt;/span&gt;     &lt;br /&gt;&lt;span style="font-size:0.85em;"&gt;When: April 21st, 2009 at 12:00pm ET      &lt;br /&gt;Host: Rachel Appel       &lt;br /&gt;Link: &lt;a href="https://www323.livemeeting.com/cc/usergroups/join?id=ZBZ3KJ&amp;amp;role=attend" title="Join Live Meeting" target="_blank"&gt;https://www323.livemeeting.com/cc/usergroups/join?id=ZBZ3KJ&amp;amp;role=attend&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;
  
&lt;p&gt;&lt;b&gt;Abstract:&lt;/b&gt; Join us for a lap around the new features in Silverlight 3 ranging from business application development to rich media, validation, navigation and out of browser support. If you’re new to Silverlight 3, or new to Silverlight itself, you’ll want to join us for this end-to-end look at Microsoft’s premier RIA platform. We’ll cover the basics from Silverlight 2, but focus primarily on the new announcements from mix09 and new features in Silverlight 3.&lt;/p&gt;
  
&lt;p&gt;&lt;b&gt;Bio:&lt;/b&gt; Pete Brown is a Microsoft MVP for Client Application Development (Silverlight and WPF), an INETA speaker, and an Architect/Project Manager for Applied Information Sciences in the Washington, DC area. From his first sprite graphics and custom character sets on the Commodore 64 to 3d modeling and design through to Silverlight, Surface, XNA, and WPF, Pete has always had a deep interest in programming, design, and user experience. His involvement in Silverlight goes back to the Silverlight 1.1 alpha application that he co-wrote and put into production in July 2007. Pete has been programming for fun since 1984, and professionally since 1992. In his spare time, Pete enjoys programming, blogging, designing and building his own woodworking projects and raising his two children with his wife in the suburbs of Maryland. Pete’s blog is at &lt;a href="http://www.irritatedVowel.com/Blog" target="_blank"&gt;http://www.irritatedVowel.com/Blog&lt;/a&gt; , and you can follow him on Twitter at &lt;a href="http://twitter.com/pete_brown" target="_blank"&gt;http://twitter.com/pete_brown&lt;/a&gt;. &lt;/p&gt;
  
&lt;p style="padding-top:12px;"&gt;&lt;a href="http://www.platinumbay.com/blogs/postimages/INETALiveWebcastsRoundOne_3109/image_3.png"&gt;&lt;img src="http://www.platinumbay.com/blogs/postimages/INETALiveWebcastsRoundOne_3109/image_thumb_3.png" title="image" style="border-width:0px;margin:0px 15px 0px 0px;display:inline;" alt="image" width="64" align="left" border="0" height="64" /&gt;&lt;/a&gt;&lt;span style="font-weight:bold;font-size:1.2em;"&gt;Steve Andrews – Visual Studio 2008 Tips and Treats&lt;/span&gt;     &lt;br /&gt;&lt;span style="font-size:0.85em;"&gt;When: April 22nd, 2009 at 12:00pm ET      &lt;br /&gt;Host: Rachel Appel       &lt;br /&gt;Link: &lt;a href="https://www323.livemeeting.com/cc/usergroups/join?id=TNTB2N&amp;amp;role=attend" title="Join Live Meeting" target="_blank"&gt;https://www323.livemeeting.com/cc/usergroups/join?id=TNTB2N&amp;amp;role=attend&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;
  
&lt;p&gt;&lt;b&gt;Abstract: &lt;/b&gt;Based on real life experience of 8+ hours a day developing with Visual Studio, learn some sweet tips and tricks to tame the IDE. With something new for everyone, these techniques will give you valuable information to start using right away, increase your productivity, and make you wonder how you survived all this time without them.&lt;/p&gt;
  
&lt;p&gt;&lt;b&gt;Bio:&lt;/b&gt; Steve Andrews is a Team System MVP and INETA Board Member and Speaker, and has been working as a developer for more than 9 years. During this time, he has designed and developed applications in such widely varying areas as trust accounting, medical information management, supply chain management, and retail systems. Steve is also a MCTS, ICSOO, and community fanatic.&lt;/p&gt;
  
&lt;p style="padding-top:12px;"&gt;&lt;a href="http://www.platinumbay.com/blogs/postimages/INETALiveWebcastsRoundOne_3109/image_4.png"&gt;&lt;img src="http://www.platinumbay.com/blogs/postimages/INETALiveWebcastsRoundOne_3109/image_thumb_4.png" title="image" style="border-width:0px;margin:0px 15px 0px 0px;display:inline;" alt="image" width="64" align="left" border="0" height="64" /&gt;&lt;/a&gt;&lt;span style="font-weight:bold;font-size:1.2em;"&gt;Claudio Lassala – Design Patterns in .NET&lt;/span&gt;     &lt;br /&gt;&lt;span style="font-size:0.85em;"&gt;When: April 27th, 2009 at 12:00pm ET      &lt;br /&gt;Host: Steve Andrews       &lt;br /&gt;Link: &lt;a href="https://www323.livemeeting.com/cc/usergroups/join?id=P648S9&amp;amp;role=attend" title="Join Live Meeting" target="_blank"&gt;https://www323.livemeeting.com/cc/usergroups/join?id=P648S9&amp;amp;role=attend&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;
  
&lt;p&gt;&lt;b&gt;Abstract:&lt;/b&gt; Design Patterns are used every day by most developers in one way or another. A basic understanding of patterns and how to implement them is very useful for all .NET developers, and this session tries to clarify design patterns in a way that everybody can understand and start thinking about patterns in a more natural way.     &lt;br /&gt;&lt;/p&gt;
  
&lt;p&gt;&lt;b&gt;Bio:&lt;/b&gt; Claudio Lassala is a Senior Developer at EPS Software Corp. He has presented several lectures at Microsoft events such as PDC Brazil and various other Microsoft seminars, as well as several conferences and user groups across North America and Brazil. He is a multiple winner of the Microsoft MVP Award since 2001 (for Visual FoxPro in 2001-2002, and for C# ever since), an INETA speaker, and also holds the MCSD for .NET certification. He has articles published on several magazines, such as MSDN Brazil Magazine, CoDe Magazine, UTMag, Developers Magazine, and FoxPro Advisor.Claudio blogs at &lt;a href="http://claudiolassala.spaces.live.com" target="_blank"&gt;http://claudiolassala.spaces.live.com&lt;/a&gt;, and can be followed on Twitter at &lt;a href="http://twitter.com/ClaudioLassala" target="_blank"&gt;http://twitter.com/ClaudioLassala&lt;/a&gt;. More detailed information regarding his presentations and articles can be found in his &lt;a href="https://mvp.support.microsoft.com/default.aspx/profile=ec6b1e0b-8efc-4530-97b0-55bd924e26d0" target="_blank"&gt;MVP Profile&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=745" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hw6Ij-qLYWY:FsuysQxYIv0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=hw6Ij-qLYWY:FsuysQxYIv0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hw6Ij-qLYWY:FsuysQxYIv0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=hw6Ij-qLYWY:FsuysQxYIv0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hw6Ij-qLYWY:FsuysQxYIv0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hw6Ij-qLYWY:FsuysQxYIv0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=hw6Ij-qLYWY:FsuysQxYIv0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hw6Ij-qLYWY:FsuysQxYIv0:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hw6Ij-qLYWY:FsuysQxYIv0:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=hw6Ij-qLYWY:FsuysQxYIv0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/hw6Ij-qLYWY" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/INETA+Live/default.aspx">INETA Live</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/04/20/ineta-live-webcasts-round-one.aspx</feedburner:origLink></item><item><title>Community Radio #1: The After-Party</title><link>http://feedproxy.google.com/~r/dotneticated/~3/ehpldy3S_Rs/community-radio-1-the-after-party.aspx</link><pubDate>Sat, 11 Apr 2009 11:38:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:738</guid><dc:creator>Steve</dc:creator><slash:comments>3</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/04/11/community-radio-1-the-after-party.aspx#comments</comments><description>&lt;p&gt;One of my near-term goals is to start up a community-focused podcast. Until I get hardware funding however, I’ve decided to start with blogcasts. For this episode, I’m having a conversation with some folks about community events and after-parties via email. These folks are:&lt;/p&gt;  &lt;table cellpadding="2" cellspacing="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;&lt;b&gt;Name:&lt;/b&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;b&gt;Blog&lt;/b&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Stephen Forte&lt;/td&gt;        &lt;td&gt;Technology Entrepreneur &amp;amp; Consultant&lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.stephenforte.net"&gt;www.stephenforte.net&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Rob Zelt&lt;/td&gt;        &lt;td&gt;President, INETA North America&lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.robzelt.com/blog"&gt;www.robzelt.com/blog&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Michael Eaton&lt;/td&gt;        &lt;td&gt;Independent Consultant&lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.mjeaton.net/blog"&gt;www.mjeaton.net/blog&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Rachel Appel&lt;/td&gt;        &lt;td&gt;Independent Consultant&lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.rachelappel.com"&gt;www.rachelappel.com&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Daniel Egan&lt;/td&gt;        &lt;td&gt;Developer Evangelist, Microsoft&lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.dotnetdoc.com"&gt;www.dotnetdoc.com&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;To kick it off, I threw out a couple ideas:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;There is some debate about whether, for code camps, to have a speaker party or an attendee party, and whether to hold it the evening before or after the event. &lt;/li&gt;    &lt;li&gt;There is also some discussion about the practicality of having post-meeting events as well. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Here is the transcript:&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&lt;b&gt;Stephen Forte: &lt;/b&gt;&lt;/i&gt;I think that there should be neither. Code Camps are suppose to be community based and organized. So if you want to have some kind of party, everyone should just go to the bar afterwards, nothing official. That is what we did, and we were lucky, our DE was there and picked up the first round or two.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;Rob Zelt:&lt;/i&gt; &lt;/b&gt;I completely disagree with Stephen. (I&amp;#39;m not sure I do, but it always makes for a better conversation this way ;-)&lt;/p&gt;  &lt;p&gt;While I do think it is important for events like code camps to not put up barriers between speakers and attendees, I also think that creating an opportunity for speakers and volunteers to gather at a speaker dinner the night before a code camp creates an incentive for new speakers and volunteers to get involved. It doesn&amp;#39;t need to be anything fancy (or funded), but can go a long way as a pat on the back for those putting in the effort to make the event happen. &lt;/p&gt;  &lt;p&gt;I really like the model the SoCal groups use for their events that include a speaker/volunteer dinner of Friday and then a big attendee/speaker/volunteer event on the Saturday night. They go all out with a live band and everything, but I think the importance is in giving everybody a chance to socialize.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;Steve Andrews: &lt;/i&gt;&lt;/b&gt;I agree with Stephen in that they typically shouldn’t be official. My thought though is that the speaker and/or attendee parties for Code Camps should occur after the event, as to attract more attendees and speakers, including those who come from out of town.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;Daniel Egan: &lt;/i&gt;&lt;/b&gt;I agree with Rob... (obviously since he used us as a reference lol).&amp;nbsp; The great thing about code camp is that you are able to find new speakers that are not on the &amp;quot;user group circuit&amp;quot; already. The Friday meetup allows you the time to make the contact with these individuals and encourage them to do the talks at the UGs also. We do leave ours &amp;quot;Semi-open&amp;quot; meaning that others are allowed to come but it is not announced to ALL the attendees, but if they find out about it, they are welcome.&lt;/p&gt;  &lt;p&gt;As a matter of fact, I think I met Steve Andrews at the San Diego Speakers dinner.&amp;nbsp; So I guess you can decide if that was a good thing or bad thing :)&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;Michael Eaton:&lt;/i&gt; &lt;/b&gt;I go back and forth on this one. While I think speaker dinners are ok, they can appear elitist. If I get into town early for an event, it&amp;#39;s nice to hang out with friends (who, for the most part, are speakers), but this doesn&amp;#39;t have to be an official event. As far as I&amp;#39;m concerned, anyone can show up, especially if it&amp;#39;s not being paid for by the event organizers.&lt;/p&gt;  &lt;p&gt;After parties are a great way to relax, especially if you&amp;#39;ve traveled and then spoken at the event.I think far too often though, the after-party *is* the event for many people.&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&lt;b&gt;Rachel Appel: &lt;/b&gt;&lt;/i&gt;I think I&amp;#39;m with Mike on this one. I don&amp;#39;t want to appear elitist, nor do I want to exclude anyone. But I like to hang with my friends too, many of whom happen to be speaking. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;Steve Andrews: &lt;/i&gt;&lt;/b&gt;I think opening up such events to everyone, and not just speakers or other influentials, is a great way to help grow local community. One suggestion I&amp;#39;ve heard for organizers who have some budget for food or drinks for speakers is to invite everyone, and issue drink and/or food tickets to speakers. Of course, I&amp;#39;d also propose raffling some off as well to attendees.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;Michael Eaton:&lt;/i&gt;&lt;/b&gt; Hmmm, I don&amp;#39;t know about that. I know at Codemash this year, the speakers got free drink tickets for one of the hotel bars. I was given a couple for being an &amp;quot;influencer&amp;quot;, but honestly, it was weird because I had these tickets and many of my friends didn&amp;#39;t.&lt;/p&gt;  &lt;p&gt;On a related note, I know that at devLink last year, there was a raffle to win a chance to have dinner with the speakers. Maybe the national guys got off on it, but it was largely made fun of by the regional speakers.&lt;/p&gt;  &lt;p&gt;I think speakers should be applauded for traveling to events and giving up their time, but I really think we need to be careful about setting them apart at after-events.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=738" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ehpldy3S_Rs:kXisSMhfKE0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=ehpldy3S_Rs:kXisSMhfKE0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ehpldy3S_Rs:kXisSMhfKE0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=ehpldy3S_Rs:kXisSMhfKE0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ehpldy3S_Rs:kXisSMhfKE0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ehpldy3S_Rs:kXisSMhfKE0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=ehpldy3S_Rs:kXisSMhfKE0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ehpldy3S_Rs:kXisSMhfKE0:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ehpldy3S_Rs:kXisSMhfKE0:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ehpldy3S_Rs:kXisSMhfKE0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/ehpldy3S_Rs" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Community+Radio/default.aspx">Community Radio</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/04/11/community-radio-1-the-after-party.aspx</feedburner:origLink></item><item><title>INETA Board of Directors: The Board Meeting</title><link>http://feedproxy.google.com/~r/dotneticated/~3/X3M84XcRPhQ/ineta-board-of-directors-the-board-meeting.aspx</link><pubDate>Wed, 08 Apr 2009 02:01:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:739</guid><dc:creator>Steve</dc:creator><slash:comments>0</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/04/07/ineta-board-of-directors-the-board-meeting.aspx#comments</comments><description>&lt;p&gt;This past weekend I went down to Raleigh, NC for my first INETA Board Meeting. Never a fan of being cooped up in a conference room, I had slight apprehensions about nicotine and caffeine withdrawls and the like. Rather, it turned out to be a very engaging and enjoyable time with fellow community-minded folks. I would even argue it was productive!&lt;/p&gt;  &lt;p&gt;As part of the meeting, we voted on the primary roles each director would be responsible for. I think the choices were obvious and well-placed, and I look forward to what the team will do over the next year. The primary role assignments are:&lt;/p&gt;  &lt;table cellpadding="2" cellspacing="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;Chris Williams&lt;/td&gt;        &lt;td&gt;Director of Membership&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Lori McKinney&lt;/td&gt;        &lt;td&gt;Director of Marketing&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Randy Walker&lt;/td&gt;        &lt;td&gt;Director of Speakers&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Shawn Weisfeld&lt;/td&gt;        &lt;td&gt;Director of Community Activities&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Steve Andrews&lt;/td&gt;        &lt;td&gt;Director of Technology&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;One piece of information I would like to share is that the Regional Speaker Program is not dead as some have suggested. Rather, it is actively being pursued and we are working on getting all the right pieces in place. More information will be announced as it is available.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=739" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=X3M84XcRPhQ:rSneHAV6sSU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=X3M84XcRPhQ:rSneHAV6sSU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=X3M84XcRPhQ:rSneHAV6sSU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=X3M84XcRPhQ:rSneHAV6sSU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=X3M84XcRPhQ:rSneHAV6sSU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=X3M84XcRPhQ:rSneHAV6sSU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=X3M84XcRPhQ:rSneHAV6sSU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=X3M84XcRPhQ:rSneHAV6sSU:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=X3M84XcRPhQ:rSneHAV6sSU:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=X3M84XcRPhQ:rSneHAV6sSU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/X3M84XcRPhQ" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/INETA/default.aspx">INETA</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/04/07/ineta-board-of-directors-the-board-meeting.aspx</feedburner:origLink></item><item><title>INETA Board of Directors</title><link>http://feedproxy.google.com/~r/dotneticated/~3/HdEShpjY4pQ/ineta-board-of-directors.aspx</link><pubDate>Thu, 12 Mar 2009 21:32:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:725</guid><dc:creator>Steve</dc:creator><slash:comments>3</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/03/12/ineta-board-of-directors.aspx#comments</comments><description>&lt;p&gt;On Tuesday, INETA NORAM (the International .NET Association, North America) announced the results of their Board of Directors elections. INETA’s mission is to offer assistance and resources to community groups that promote and educate their membership in Microsoft&amp;#39;s .NET technologies.&lt;/p&gt;  &lt;p&gt;What makes this election different from the past however, is that I was elected to a Director position! I am very excited to step into this position on March 3rd and be a part of helping make our developer communities stronger.&lt;/p&gt;  &lt;p&gt;Throughout my moderate speaking schedule though, I have heard various complaints about INETA, and I want to take this opportunity to get your thoughts and concerns. To that end, I am soliciting feedback on INETA from the North American community. What does INETA do well? What issues have you had with INETA in the past? How can INETA better serve your local community? What do you want INETA to be?&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;While I can’t promise anything, this is your opportunity to be heard. Feel free to send me an email, Twitter DM, IM, certified letter, carrier pigeon, or singing telegram.&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=725" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=HdEShpjY4pQ:uafPkbFQtuw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=HdEShpjY4pQ:uafPkbFQtuw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=HdEShpjY4pQ:uafPkbFQtuw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=HdEShpjY4pQ:uafPkbFQtuw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=HdEShpjY4pQ:uafPkbFQtuw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=HdEShpjY4pQ:uafPkbFQtuw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=HdEShpjY4pQ:uafPkbFQtuw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=HdEShpjY4pQ:uafPkbFQtuw:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=HdEShpjY4pQ:uafPkbFQtuw:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=HdEShpjY4pQ:uafPkbFQtuw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/HdEShpjY4pQ" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/INETA/default.aspx">INETA</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/03/12/ineta-board-of-directors.aspx</feedburner:origLink></item><item><title>MSTest Digest #1</title><link>http://feedproxy.google.com/~r/dotneticated/~3/F0Ejwr5Sxoc/mstest-digest-1.aspx</link><pubDate>Thu, 19 Feb 2009 05:49:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:705</guid><dc:creator>Steve</dc:creator><slash:comments>3</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/02/19/mstest-digest-1.aspx#comments</comments><description>&lt;p&gt;A couple weeks ago, I became engaged with some folks on Twitter about their specific complaints about MSTest. I received five complaints, some of which I sent off to Microsoft. I’d like to share the answers and Microsoft’s response in hopes of creating more awareness around the tool’s capabilities.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Artifact Cleanup – When tests are run, artifacts such as test results and the (optionally) shadow-copied assemblies are left behind. For a team running many, frequent tests, this can quickly eat up disk space.&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;In Visual Studio 2008, a new option was created to help alleviate this problem. Under Tools &amp;gt; Options &amp;gt; Test Tools &amp;gt; Test Execution, there is a new setting called Test Result Management which contains a numeric option to limit the number of old test results. For tests executed as part of an automated Team Build, the results should always be scorched by Team Build as they are subsequently stored in the Team Foundation database.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.platinumbay.com/blogs/postimages/MSTestDigest1_5E99/image.png" title="image" style="border-width:0px;display:block;float:none;margin-left:auto;margin-right:auto;" alt="image" width="644" border="0" height="105" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Extensibility: Creating custom MSTest attributes is a bit more drawn out than most would like.&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Microsoft has simplified the ability to create custom test types by allowing inheritance from existing MSTest attributes. This builds on the Unit Test base and allows you to customize any part (initialize, cleanup, execution) of the test being run.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb165914.aspx"&gt;Creating Custom Test Types in Visual Studio Team System&lt;/a&gt; on MSDN &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.dotnetwiki.org/IntroducingYUnitAMicroscopicUnitTestFrameworkForTeamTest.aspx"&gt;Introducing YUnit, a Microscopic Unit Test Framework (for Team Test)&lt;/a&gt; – on Peli’s Farm &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;Transactions – NUnit has an option for Transactional tests, which automatically rollback after the test is run.&lt;/b&gt; &lt;/p&gt;  &lt;p&gt;This is not provided out of the box. You can either code up the transaction manually (&lt;a href="http://www.jimbodriven.com/2007/11/on-unit-tests-seed-data-and.html"&gt;http://www.jimbodriven.com/2007/11/on-unit-tests-seed-data-and.html&lt;/a&gt;), or use the extensibility points to create your own test type to handle this.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.codeplex.com/MSTestExtensions"&gt;MSTestExtensions&lt;/a&gt; on CodePlex&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;Data-driven Testing – In NUnit, there is a RowTest attribute which allows data to be specified to use in testing (&lt;/b&gt;&lt;a href="http://mjeaton.net/blog/archive/2008/11/03/getting-started-with-nunits-rowtest.aspx"&gt;&lt;b&gt;http://mjeaton.net/blog/archive/2008/11/03/getting-started-with-nunits-rowtest.aspx&lt;/b&gt;&lt;/a&gt;&lt;b&gt;).&lt;/b&gt; &lt;/p&gt;  &lt;p&gt;Microsoft is looking into this for future releases. For now, take a look how to achieve this in the current releases. This method has the added benefit of not having to recompile tests to change test data.&lt;br /&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://codeclimber.net.nz/archive/2008/01/18/How-to-simulate-RowTest-with-MS-Test.aspx"&gt;How to simulate RowTest with MSTest&lt;/a&gt; on Simone Chiaretta’s blog&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;Accessibility: It was suggested that MSTest should be available as a standalone, free product, similar to NUnit, MBUnit, xUnit, etc.&lt;/b&gt; &lt;/p&gt;  &lt;p&gt;Microsoft is looking into this for future releases.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;So of course my next question is, what else don’t you like about MSTest?&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=705" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=F0Ejwr5Sxoc:YkqlP52AzvE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=F0Ejwr5Sxoc:YkqlP52AzvE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=F0Ejwr5Sxoc:YkqlP52AzvE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=F0Ejwr5Sxoc:YkqlP52AzvE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=F0Ejwr5Sxoc:YkqlP52AzvE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=F0Ejwr5Sxoc:YkqlP52AzvE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=F0Ejwr5Sxoc:YkqlP52AzvE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=F0Ejwr5Sxoc:YkqlP52AzvE:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=F0Ejwr5Sxoc:YkqlP52AzvE:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=F0Ejwr5Sxoc:YkqlP52AzvE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/F0Ejwr5Sxoc" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Team+Foundation/default.aspx">Team Foundation</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/MSTest/default.aspx">MSTest</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/02/19/mstest-digest-1.aspx</feedburner:origLink></item><item><title>Team System on Twitter</title><link>http://feedproxy.google.com/~r/dotneticated/~3/4wseZEbbKvY/team-system-on-twitter.aspx</link><pubDate>Wed, 18 Feb 2009 20:52:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:708</guid><dc:creator>Steve</dc:creator><slash:comments>13</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/02/18/team-system-on-twitter.aspx#comments</comments><description>&lt;p&gt;
        Twitter is quite the rage these days, so I thought I&amp;#39;d compile a list of all the
        Visual Studio and Team System influentials. Here you go:&lt;/p&gt;
    
&lt;table cellpadding="2" cellspacing="2"&gt;
        &lt;tbody&gt;
            
&lt;tr&gt;
                
&lt;td colspan="3"&gt;
                    &lt;h3&gt;
                        General Info&lt;/h3&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://www.twitter.com/MicrosoftVSTS"&gt;
                        @MicrosoftVSTS&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    &amp;nbsp;
                &lt;/td&gt;
                
&lt;td&gt;
                    &amp;nbsp;
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td colspan="3"&gt;
                    &lt;h3&gt;
                        Product Teams&lt;/h3&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/JasonBarile"&gt;@JasonBarile&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Jason Barile
                &lt;/td&gt;
                
&lt;td&gt;
                    Principal Test Manager for Team Foundation Server
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/adambarr"&gt;@adambarr&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Adam Barr
                &lt;/td&gt;
                
&lt;td&gt;
                    Test Lead for Team Foundation Build and Team System Web Access&lt;br /&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/jeffbe"&gt;@jeffbe&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Jeff Beehler
                &lt;/td&gt;
                
&lt;td&gt;
                    Chief of Staff for Visual Studio Team System&lt;br /&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/robcaron"&gt;@robcaron&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Rob Caron
                &lt;/td&gt;
                
&lt;td&gt;
                    Visual Studio Team System &lt;span class="bio"&gt;&lt;/span&gt;BlogFather
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/noahcoad"&gt;@noahcoad&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Noah Coad
                &lt;/td&gt;
                
&lt;td&gt;
                    Program Manager for Visual Studio
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/mgroves84"&gt;@mgroves84&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Mark Groves
                &lt;/td&gt;
                
&lt;td&gt;
                    &lt;span class="bio"&gt;Senior Project Manager for Visual Studio Architecture Edition&lt;/span&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/bharry"&gt;@bharry&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Brian Harry
                &lt;/td&gt;
                
&lt;td&gt;
                    &lt;span class="bio"&gt;Product Unit Manager for Team Foundation Server&lt;/span&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/gholliday"&gt;@gholliday&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Grant Holliday
                &lt;/td&gt;
                
&lt;td&gt;
                    &amp;nbsp;
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/bubbafat"&gt;@bubbafat&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Robert Horvik
                &lt;/td&gt;
                
&lt;td&gt;
                    Software Engineer for Team Foundation Server&lt;br /&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/briankel"&gt;@briankel&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Brian Keller&lt;br /&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Technical Evangelist for Visual Studio Team System&lt;br /&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/jimlamb"&gt;@jimlamb&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Jim Lamb
                &lt;/td&gt;
                
&lt;td&gt;
                    Program Manager for Team Foundation Server
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/mitrik"&gt;@mitrik&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Matt Mitrik
                &lt;/td&gt;
                
&lt;td&gt;
                    Program Manager
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/markmyd"&gt;@markmyd&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Mark Mydland
                &lt;/td&gt;
                
&lt;td&gt;
                    Group Manager for Visual Studio Tester Edition
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/pprovost"&gt;@pprovost&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Peter Provost
                &lt;/td&gt;
                
&lt;td&gt;
                    Senior Program Manager for Visual Studio Team System
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/dseven"&gt;@dseven&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Doug Seven
                &lt;/td&gt;
                
&lt;td&gt;
                    Senior Program Manager for Visual Studio Team System
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/chass"&gt;@chass&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Chuck Sterling
                &lt;/td&gt;
                
&lt;td&gt;
                    Program Manager for Visual Studio Team System
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td colspan="3"&gt;
                    &lt;h3&gt;
                        MVPs&lt;/h3&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/edblankenship"&gt;
                        @edblankenship&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Ed Blankenship
                &lt;/td&gt;
                
&lt;td&gt;
                    &lt;a href="http://www.edsquared.com/"&gt;http://www.edsquared.com&lt;/a&gt;&lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/anthonyborton"&gt;
                        @anthonyborton&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Anthony Borton
                &lt;/td&gt;
                
&lt;td&gt;
                    &lt;a href="http://myvstsblog.com/"&gt;http://myvstsblog.com&lt;/a&gt;&lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/benday"&gt;@benday&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Ben Day
                &lt;/td&gt;
                
&lt;td&gt;&lt;a href="http://blog.benday.com/"&gt;http://blog.benday.com&lt;/a&gt;&lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/mitchdenny"&gt;@mitchdenny&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Mitch Denny
                &lt;/td&gt;
                
&lt;td&gt;
                    &lt;a href="http://notgartner.com/"&gt;http://notgartner.com&lt;/a&gt;&lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/mickey_gousset"&gt;
                        @mickey_gousset&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Mickey Gousset
                &lt;/td&gt;
                
&lt;td&gt;
                    &lt;a href="http://www.teamsystemrocks.com/"&gt;http://www.teamsystemrocks.com&lt;/a&gt;&lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/pjhacker"&gt;@pjhacker&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Paul Hacker
                &lt;/td&gt;
                
&lt;td&gt;
                    &lt;a href="http://www.phacker.wordpress.com/"&gt;http://www.phacker.wordpress.com&lt;/a&gt;&lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/kevdadev"&gt;@kevdadev&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Kevin Israel
                &lt;/td&gt;
                
&lt;td&gt;
                    &lt;a href="http://vsteamsystemcentral.com/cs21/blogs/kevin_israel"&gt;
                    http://vsteamsystemcentral.com/cs21/blogs/kevin_israel&lt;/a&gt;&lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/wesmacdonald"&gt;
                        @wesmacdonald&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Wes MacDonald
                &lt;/td&gt;
                
&lt;td&gt;
                    &lt;a href="http://wesmacdonald.spaces.live.com/"&gt;
                    http://wesmacdonald.spaces.live.com&lt;/a&gt;&lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/tedmalone"&gt;@tedmalone&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Ted Malone
                &lt;/td&gt;
                
&lt;td&gt;
                    &lt;a href="http://portal.sqltrainer.com/"&gt;http://portal.sqltrainer.com&lt;/a&gt;&lt;/td&gt;
            &lt;/tr&gt;
            
           
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/brianrandell"&gt;
                        @brianrandell&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Brian Randell
                &lt;/td&gt;
                
&lt;td&gt;
                    &lt;a href="http://www.mcwtech.com/cs/blogs/brianr"&gt;
                    http://www.mcwtech.com/cs/blogs/brianr&lt;/a&gt;&lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/clemensreijnen"&gt;
                        @clemensreijnen&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Clemens Reijnen
                &lt;/td&gt;
                
&lt;td&gt;
                    &lt;a href="http://www.clemensreijnen.nl/"&gt;http://www.clemensreijnen.nl&lt;/a&gt;&lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/michaelruminer"&gt;
                        @michaelruminer&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Michael Ruminer
                &lt;/td&gt;
                
&lt;td&gt;
                    &lt;a href="http://manicprogrammer.com/cs/blogs/michaelruminer"&gt;
                    http://manicprogrammer.com/cs/blogs/michaelruminer&lt;/a&gt;&lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/Joel_Semeniuk"&gt;
                        @Joel_Semeniuk&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Joel Semeniuk
                &lt;/td&gt;
                
&lt;td&gt;
                    &amp;nbsp;&lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/EtienneT"&gt;@EtienneT&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Etienne Tremblay
                &lt;/td&gt;
                
&lt;td&gt;
                    &amp;nbsp;&lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/omarv74"&gt;@omarv74&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    D. Omar Villarreal
                &lt;/td&gt;
                
&lt;td&gt;
                    &lt;a href="http://www.teamsystemrocks.com/"&gt;http://www.teamsystemrocks.com&lt;/a&gt;&lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/martinwoodward"&gt;
                        @martinwoodward&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Martin Woodward
                &lt;/td&gt;
                
&lt;td&gt;
                    &lt;a href="http://www.woodwardweb.com/"&gt;http://www.woodwardweb.com&lt;/a&gt;&lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td colspan="3"&gt;
                    &lt;h3&gt;
                        Other Influentials&lt;/h3&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://www.twitter.com/maordp"&gt;@maordp&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Maor David
                &lt;/td&gt;
                
&lt;td&gt;
                    Developer Evangelist, Former Team System MVP
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://www.twitter.com/leshka"&gt;@leshka&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Alexei Govorine
                &lt;/td&gt;
                
&lt;td&gt;
                    Co-runs the Central Ohio ALM User Group
                &lt;/td&gt;
            &lt;/tr&gt;
            
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://www.twitter.com/jeffhunsaker"&gt;
                        @jeffhunsaker&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Jeff Hunsaker
                &lt;/td&gt;
                
&lt;td&gt;
                    Co-runs the Central Ohio ALM User Group
                &lt;/td&gt;
            &lt;/tr&gt;
         &lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://twitter.com/tommynorman"&gt;@tommynorman&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Tommy Norman
                &lt;/td&gt;
                
&lt;td&gt;
                    &lt;a href="http://tommynorman.blogspot.com/"&gt;http://tommynorman.blogspot.com&lt;/a&gt;&lt;/td&gt;
            &lt;/tr&gt;   
&lt;tr&gt;
                
&lt;td&gt;
                    &lt;a href="http://www.twitter.com/christullier"&gt;
                        @christullier&lt;/a&gt;
                &lt;/td&gt;
                
&lt;td&gt;
                    Chris Tullier
                &lt;/td&gt;
                
&lt;td&gt;
                    &lt;a href="http://www.platinumbay.com/controlpanel/blogs/www.TeamSystemLive.com"&gt;www.TeamSystemLive.com&lt;/a&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
        &lt;/tbody&gt;
    &lt;/table&gt;
&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=708" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4wseZEbbKvY:10uHSup026I:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=4wseZEbbKvY:10uHSup026I:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4wseZEbbKvY:10uHSup026I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=4wseZEbbKvY:10uHSup026I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4wseZEbbKvY:10uHSup026I:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4wseZEbbKvY:10uHSup026I:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=4wseZEbbKvY:10uHSup026I:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4wseZEbbKvY:10uHSup026I:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4wseZEbbKvY:10uHSup026I:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=4wseZEbbKvY:10uHSup026I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/4wseZEbbKvY" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/TFS/default.aspx">TFS</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Team+Foundation/default.aspx">Team Foundation</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/02/18/team-system-on-twitter.aspx</feedburner:origLink></item><item><title>DevEvents – LINQ to SQL Model Binding in .NET MVC</title><link>http://feedproxy.google.com/~r/dotneticated/~3/0iqdJH4gWO8/devevents-linq-to-sql-model-binding-in-net-mvc.aspx</link><pubDate>Sun, 18 Jan 2009 23:30:45 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:698</guid><dc:creator>Steve</dc:creator><slash:comments>2</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/01/18/devevents-linq-to-sql-model-binding-in-net-mvc.aspx#comments</comments><description>&lt;p&gt;In a &lt;a href="http://www.platinumbay.com/blogs/dotneticated/archive/2008/12/13/devevents-the-generic-repository.aspx"&gt;previous post&lt;/a&gt;, I outlined the generics-based Repository model I built for &lt;a href="http://www.devevents.com" target="_blank"&gt;DevEvents&lt;/a&gt;. There are two additional pieces of extensibility to the model that I left out for the sake of clarity. The first one, and the one I’ll cover in this post, is LINQ to SQL model binding.&lt;/p&gt;  &lt;p&gt;During the initial development of the DevEvents framework, I was using MVC model binding for forms and entities:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;ActionResult &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;Create(&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;FormCollection &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;form)&lt;/span&gt;&lt;span style="background:#fefefe;color:green;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;    var &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;org = &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;new &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Organization&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;();&lt;/span&gt;&lt;br /&gt;    &lt;span style="background:#fefefe;color:blue;"&gt;try&lt;br /&gt;&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;    {&lt;br /&gt;        UpdateModel(org, form);&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Unfortunately, from time to time I would receive a stack overflow exception when calling &lt;font face="Courier New"&gt;UpdateModel&lt;/font&gt;. This is because LINQ to SQL entities contain references as properties to related entities, and the model binding would iterate recursively through them, forever.&lt;/p&gt;

&lt;p&gt;Fortunately, UpdateModel contains a generic overload that helps to solve this problem:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;protected internal void &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;UpdateModel&amp;lt;TModel&amp;gt;(TModel model) &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;where &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;TModel : &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;class&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;For TModel, I can specify an interface which contains properties for the fields to bind. I have 60 tables though, and I didn’t want to manually create interfaces for each of them, so I set about with a T4 template to auto-create the interfaces based on my LINQ to SQL model. The generated code lives in the same namespace as my model, and contains a base, empty interface:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public interface &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;IFormBindable &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;{ }&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Then, I iterate through the DBML XML and create an interface that implements IFormBindable for each table. Finally, I iterate through the columns, and create properties for each column that is a primitive type.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public interface &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;IPresentationFormBindable &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;: &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;IFormBindable
&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;{
    System.&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;String &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;Title { &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;get&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;; &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;set&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;; }
    System.&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;String &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;Abstract { &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;get&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;; &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;set&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;; }
&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;    ...
}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;In order to make my model entities bindable, I apply these custom interfaces to their respective types in model partial classes, such as:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public partial class &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Presentation &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;: &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;IPresentationFormBindable&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Finally, I can call UpdateModel for a presentation as follows, and only the properties specified on the IFormBindable interface will be bound.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;ActionResult &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;AddPresentation(&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;string &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;id, &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;FormCollection &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;form)
{&lt;br /&gt;&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;    ...
    &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Presentation &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;presentation = _presentationRepository.GetPresentationByPresentationID(id);
    UpdateModel&amp;lt;&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;IPresentationFormBindable&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;gt;(presentation, form);&lt;br /&gt;    ...&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;The second item I left out of the generic repository post for clarity was validation, which I plan to discuss in an upcoming post.&lt;/p&gt;

&lt;p&gt;Hope this helps!&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=698" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=0iqdJH4gWO8:wHRG04ZuAYU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=0iqdJH4gWO8:wHRG04ZuAYU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=0iqdJH4gWO8:wHRG04ZuAYU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=0iqdJH4gWO8:wHRG04ZuAYU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=0iqdJH4gWO8:wHRG04ZuAYU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=0iqdJH4gWO8:wHRG04ZuAYU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=0iqdJH4gWO8:wHRG04ZuAYU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=0iqdJH4gWO8:wHRG04ZuAYU:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=0iqdJH4gWO8:wHRG04ZuAYU:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=0iqdJH4gWO8:wHRG04ZuAYU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/0iqdJH4gWO8" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/DevEvents/default.aspx">DevEvents</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/UpdateModel/default.aspx">UpdateModel</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/LINQ+to+SQL/default.aspx">LINQ to SQL</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/01/18/devevents-linq-to-sql-model-binding-in-net-mvc.aspx</feedburner:origLink></item><item><title>DevEvents: More .NET MVC HtmlHelpers</title><link>http://feedproxy.google.com/~r/dotneticated/~3/xNWwAQhDeN0/devevents-more-net-mvc-htmlhelpers.aspx</link><pubDate>Mon, 12 Jan 2009 15:50:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:689</guid><dc:creator>Steve</dc:creator><slash:comments>7</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/01/12/devevents-more-net-mvc-htmlhelpers.aspx#comments</comments><description>&lt;p&gt;In my last post, I showed how I used an HtmlHelper to create an enumerable-based dropdown. In this post, I’ll share a few more HtmlHelpers I’ve created to make life easier, or the user experience better.&lt;/p&gt;  &lt;p&gt;There are places in &lt;a href="http://www.devevents.com" target="_blank"&gt;DevEvents&lt;/a&gt;, like the directory listings where it would not be optimal to display the whole text of a speaker or event description. In such cases, I use an HtmlHelper to truncate the text, and optionally append a ‘more info’ link. To make it even better, you might consider finding the next space (‘ ‘), and truncating there.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;public static string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;TruncateText(&lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;this &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;HtmlHelper &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;helper, &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;text, &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;int &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;maxLength, &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;postFix)&lt;br /&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(text != &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;null &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;amp;&amp;amp; text.Length &amp;gt; &lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;maxLength&lt;/span&gt;)&lt;br /&gt;        &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;return &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;text.Substring(0, &lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;maxLength&lt;/span&gt;) + postFix;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;return &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;text;&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;ResolveUrl is a very handy method, but it isn’t available everywhere I needed it to be, like inside other HtmlHelpers, so I created my own ResolveUrl HtmlHelper.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;public static string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;ResolveUrl(&lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;this &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;HtmlHelper &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;helper, &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;url)&lt;br /&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(url.StartsWith(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;~/&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;))&lt;br /&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;siteRoot = helper.ViewContext.HttpContext.Request.ApplicationPath;&lt;br /&gt;        &lt;br /&gt;        &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(siteRoot == &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;string&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.Empty)&lt;br /&gt;            siteRoot = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;;&lt;br /&gt;        &lt;br /&gt;        &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;return &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;url.Replace(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;~/&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, siteRoot);&lt;br /&gt;    }&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;else&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{&lt;br /&gt;        &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;return &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;url;&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;The HTML construct of ‘&amp;lt;label for’ is very helpful for individuals with accessibility issues and non-standard browsers. Instead of having to write out the whole HTML every time, I created an HtmlHelper:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;public static string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;LabelFor(&lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;this &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;HtmlHelper &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;helper, &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;target, &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;text)&lt;br /&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;return &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;String&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.Format(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&amp;lt;label for=&amp;#39;{0}&amp;#39;&amp;gt;{1}&amp;lt;/label&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, target, text); &lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;One common website complaint is that text is not pluralized correctly. I created a very simple HtmlHelper to do just this:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;public static string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;PluralizeText(&lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;this &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;HtmlHelper &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;helper, &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;singularText, &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;pluralText, &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;int &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;number)&lt;br /&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(number == 1)&lt;br /&gt;        &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;return &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;singularText;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;else&lt;br /&gt;        return &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;pluralText;&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;
You may wish to pass in HTML attributes to one or more of your HtmlHelpers, but how do you append them to the output? Here is a simple example showing how to append HTML attributes using a dictionary. Arguably this functionality could be an HtmlHelper itself. Notice it also utilizes the ResolveUrl HtmlHelper. (&lt;em&gt;Updated: 1/14/2009: Removed some redundancy thank to Marc’s comments below&lt;/em&gt;)&amp;#160; &lt;pre class="code"&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;public static string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Image(&lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;this &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;HtmlHelper &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;helper, &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;url, &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;object &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;htmlAttributes)&lt;br /&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;StringBuilder &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;sb = &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;new &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;StringBuilder&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;();&lt;br /&gt;    sb.Append(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&amp;lt;img  src=\&amp;quot;&amp;quot; &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;+ helper.ResolveUrl(url) + &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;\&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;IDictionary&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;string&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;object&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;gt; attributes = &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;new &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;RouteValueDictionary&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(htmlAttributes);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(attributes != &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;null&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)&lt;br /&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;foreach &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;(&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;var &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;item &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;in &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;attributes)
        {
            sb.Append(&lt;/span&gt;&lt;span style="background:#fefefe;color:#a31515;"&gt;&amp;quot; &amp;quot; &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;+ item.Key + &lt;/span&gt;&lt;span style="background:#fefefe;color:#a31515;"&gt;&amp;quot;=\&amp;quot;&amp;quot; &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;+ item.Value.ToString() + &lt;/span&gt;&lt;span style="background:#fefefe;color:#a31515;"&gt;&amp;quot;\&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;);
        }&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;    }&lt;br /&gt;&lt;br /&gt;    sb.Append(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot; /&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:blue;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;return &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;sb.ToString();&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;The introduction of anonymous types, generics, and other .NET 3.0 features also introduces some complexity when working with Nullable types. To facilitate these scenarios, I created the following HtmlHelper: (&lt;em&gt;Updated 1/14/2009: Made it a generic method thanks to Liam’s comment below&lt;/em&gt;)&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public static string &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;FormatNullable&amp;lt;T&amp;gt;(&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;this &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;HtmlHelper &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;helper, &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Nullable&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;T&amp;gt; nullable, &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;string &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;format, &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;string &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;emptyText) 
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;where &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;T : &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;struct
&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;{
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;if &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;(nullable.HasValue)
        &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;return string&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;.Format(format, nullable.Value);
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;else
        return &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;emptyText;
}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Hopefully you will find one or more of these HtmlHelpers helpful in your .NET MVC development. What custom HtmlHelpers do you use? Would you do any of these differently?&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=689" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=xNWwAQhDeN0:y26_0i2TY8c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=xNWwAQhDeN0:y26_0i2TY8c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=xNWwAQhDeN0:y26_0i2TY8c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=xNWwAQhDeN0:y26_0i2TY8c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=xNWwAQhDeN0:y26_0i2TY8c:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=xNWwAQhDeN0:y26_0i2TY8c:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=xNWwAQhDeN0:y26_0i2TY8c:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=xNWwAQhDeN0:y26_0i2TY8c:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=xNWwAQhDeN0:y26_0i2TY8c:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=xNWwAQhDeN0:y26_0i2TY8c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/xNWwAQhDeN0" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/HTML/default.aspx">HTML</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/MVC/default.aspx">MVC</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/01/12/devevents-more-net-mvc-htmlhelpers.aspx</feedburner:origLink></item><item><title>Enumeration-Based Dropdowns in .NET MVC</title><link>http://feedproxy.google.com/~r/dotneticated/~3/FFW77bEZi-A/enumeration-based-dropdowns-in-net-mvc.aspx</link><pubDate>Sat, 10 Jan 2009 06:47:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:682</guid><dc:creator>Steve</dc:creator><slash:comments>8</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/01/10/enumeration-based-dropdowns-in-net-mvc.aspx#comments</comments><description>&lt;p&gt;I have a few enumerations in &lt;a href="http://www.devevents.com" target="_blank"&gt;DevEvents&lt;/a&gt;, and I found myself frequently writing code similar to the following:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Dictionary&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;int&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;gt; etlist = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;new &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Dictionary&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;int&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;gt;();&lt;br /&gt;etlist.Add(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Code Camp&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, (&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;int&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EventType&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.CodeCamp);&lt;br /&gt;etlist.Add(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Conference&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, (&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;int&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EventType&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.Conference);&lt;br /&gt;etlist.Add(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Day of .NET&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, (&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;int&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EventType&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.DayOfDotNet);&lt;br /&gt;etlist.Add(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Hands-On Labs&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, (&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;int&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EventType&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.HandsOnLabs);&lt;br /&gt;etlist.Add(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;User Group Meeting&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, (&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;int&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EventType&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.UserGroup);&lt;br /&gt;etlist.Add(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Workshop&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, (&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;int&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EventType&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.Workshop);&lt;br /&gt;etlist.Add(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Pub Night&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, (&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;int&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EventType&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.PubNight);&lt;br /&gt;etlist.Add(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Online&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, (&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;int&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)DevEvents.Common.&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EventType&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.Online);&lt;br /&gt;etlist.Add(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;BarCamp&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, (&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;int&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)DevEvents.Common.&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EventType&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.BarCamp);&lt;br /&gt;etlist.Add(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Geek Dinner&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, (&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;int&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)DevEvents.Common.&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EventType&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.GeekDinner);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(evnt != &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;null&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)&lt;br /&gt;    ViewData[&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;EventTypes&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;] = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;new &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;SelectList&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(etlist, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Value&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Key&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, evnt.EventTypeID);&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;else&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;ViewData[&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;EventTypes&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;] = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;new &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;SelectList&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(etlist, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Value&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Key&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;);&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;font color="#993300"&gt;&lt;b&gt;Update - 1/12/2009:&lt;/b&gt;&lt;/font&gt; &lt;i&gt;For an easier way to do the above, check out &lt;a href="http://slothonline.blogspot.com/2009/01/making-dropdownlist-in-aspnet-mvc-from.html" target="_blank"&gt;this post&lt;/a&gt; by &lt;a href="http://slothonline.blogspot.com/" target="_blank"&gt;Rune Jacobson&lt;/a&gt;. &lt;/i&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The problem with the approach however, is that every time I need to add a new enumeration value, I would have to modify each of these code sections, and that got very old very fast. I needed a way to generate dropdowns from the enumerations themselves. I ended up with a custom HtmlHelper to generate the dropdowns and eliminate the repetitive code.&lt;/p&gt;

&lt;p&gt;First, I created the base HtmlHelper:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;public static string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EnumDropDown(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;this &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;HtmlHelper &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;helper, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Type &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;enumType, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;id)&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;The ID is used to set the HTML ID attribute, since some dropdowns were being used by jQuery. The parameter enumType is used to pass in the type of enumeration that the dropdown should be generated from. Since I need it to be an enumeration, I check as such, returning an empty string if the check fails.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(enumType == &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;null &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;|| !enumType.IsEnum)&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;return &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Next, I attempt to retrieve a value to set as default; first from ViewData, and then from the model if it has been set. I catch an empty exception at the end, which is typically a bad practice, because it is not important if the value cannot be found – the View may be an empty form.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;object &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;defaultValue = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;null&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(helper.ViewData != &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;null&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)&lt;br /&gt;    defaultValue = helper.ViewData.Eval(id);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;try&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(defaultValue == &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;null&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)&lt;br /&gt;        defaultValue = helper.ViewData.Model.GetType().GetProperty(id).GetValue(helper.ViewData.Model, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;null&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;catch &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Exception&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;) { }&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Finally, I set about to return HTML back to the View for the desired dropdown. I create a StringBuilder, append the select start tag, and iterate through all the fields on the enumeration:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;StringBuilder &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;sb = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;new &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;StringBuilder&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;();&lt;br /&gt;&lt;br /&gt;sb.AppendFormat(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&amp;lt;select id=\&amp;quot;{0}\&amp;quot;&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, id);&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;foreach &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;var &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;item &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;in &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;enumType.GetFields(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;BindingFlags&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.Public | &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;BindingFlags&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.Static))&lt;br /&gt;{&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Next, for each enumeration field, I check whether the value equals the expected default value determined above:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;def = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(defaultValue != &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;null &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;amp;&amp;amp; defaultValue.ToString() == item.GetRawConstantValue().ToString())&lt;br /&gt;    def = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;selected=\&amp;quot;selected\&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Finally, I append each option to the StringBuilder:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;    sb.AppendFormat(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&amp;lt;option value=\&amp;quot;{0}\&amp;quot; {1}&amp;gt;{2}&amp;lt;/option&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;,&lt;br /&gt;        item.GetRawConstantValue().ToString(), def, item.Name);&lt;br /&gt;}&lt;br /&gt;sb.Append(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&amp;lt;/select&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;return &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;sb.ToString();&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;I was then able to call my HtmlHelper from the View as follows:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;= &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Html.EnumDropDown(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;typeof&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(DevEvents.Common.&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EventType&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;), &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;EventTypeID&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;) &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;I ran the code, and had a dropdown rendered with each item in the enumeration. There was one small problem however; each option display value was the enumeration field name, exactly. Instead of seeing a pretty name like “Hands-On Labs”, I saw “HandsOnLabs”. Of course this is to be expected based on the generation method used, but how do I enable a more elegant UX?&lt;/p&gt;

&lt;p&gt;The solution I used was to create a custom Attribute for my custom enumerations, storing a single property called DisplayName:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;AttributeUsage&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;AttributeTargets&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.Field)]&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;public class &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EnumDisplayNameAttribute &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;: &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Attribute&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;private string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;_displayName;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;public &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EnumDisplayNameAttribute(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;displayName)&lt;br /&gt;    {&lt;br /&gt;        _displayName = displayName;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;public string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;DisplayName&lt;br /&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;get&lt;br /&gt;        &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{&lt;br /&gt;            &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;return &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;_displayName;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;I then applied that attribute to my custom enumerations as follows:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;public enum &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EventType&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{&lt;br /&gt;    [&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EnumDisplayName&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;User Group&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)]&lt;br /&gt;    UserGroup = 0,&lt;br /&gt;    [&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EnumDisplayName&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Code Camp&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)]&lt;br /&gt;    CodeCamp = 1,&lt;br /&gt;    [&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EnumDisplayName&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Day of .NET&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)]&lt;br /&gt;    DayOfDotNet = 2,&lt;br /&gt;    [&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EnumDisplayName&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Conference&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)]&lt;br /&gt;    Conference = 3,&lt;br /&gt;    [&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EnumDisplayName&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Hands-On Lab&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)]&lt;br /&gt;    HandsOnLabs = 4,&lt;br /&gt;    [&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EnumDisplayName&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Workshop&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)]&lt;br /&gt;    Workshop = 5,&lt;br /&gt;    [&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EnumDisplayName&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Pub Night&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)]&lt;br /&gt;    PubNight = 6,&lt;br /&gt;    [&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EnumDisplayName&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Online&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)]&lt;br /&gt;    Online = 7,&lt;br /&gt;    [&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EnumDisplayName&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;BarCamp&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)]&lt;br /&gt;    BarCamp = 8,&lt;br /&gt;    [&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EnumDisplayName&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;Geek Dinner&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)]&lt;br /&gt;    GeekDinner = 9&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Finally, in my HtmlHelper, I checked for the presence of this attribute on each enumeration field, and set the display name accordingly:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EnumDisplayNameAttribute&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[] attributes =&lt;br /&gt;    (&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EnumDisplayNameAttribute&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[])item.GetCustomAttributes(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;typeof&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EnumDisplayNameAttribute&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;), &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;false&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(attributes.Length &amp;gt; 0)&lt;br /&gt;    sb.AppendFormat(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&amp;lt;option value=\&amp;quot;{0}\&amp;quot; {1}&amp;gt;{2}&amp;lt;/option&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;,&lt;br /&gt;        item.GetRawConstantValue().ToString(), def, attributes[0].DisplayName);&lt;br /&gt;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;else&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;sb.AppendFormat(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&amp;lt;option value=\&amp;quot;{0}\&amp;quot; {1}&amp;gt;{2}&amp;lt;/option&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;,&lt;br /&gt;        item.GetRawConstantValue().ToString(), def, item.Name);&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Here is the final completed code for the HtmlHelper:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;public static string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EnumDropDown(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;this &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;HtmlHelper &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;helper, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Type &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;enumType, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;id)&lt;br /&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(enumType == &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;null &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;|| !enumType.IsEnum)&lt;br /&gt;        &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;return &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;object &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;defaultValue = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;null&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(helper.ViewData != &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;null&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)&lt;br /&gt;        defaultValue = helper.ViewData.Eval(id);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;try&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{&lt;br /&gt;        &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(defaultValue == &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;null&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)&lt;br /&gt;            defaultValue = helper.ViewData.Model.GetType().GetProperty(id).GetValue(helper.ViewData.Model, &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;null&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;);&lt;br /&gt;    }&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;catch &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Exception&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;) { }&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;StringBuilder &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;sb = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;new &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;StringBuilder&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;();&lt;br /&gt;&lt;br /&gt;    sb.AppendFormat(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&amp;lt;select id=\&amp;quot;{0}\&amp;quot;&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, id);&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;foreach &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;var &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;item &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;in &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;enumType.GetFields(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;BindingFlags&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.Public | &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;BindingFlags&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.Static))&lt;br /&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;string &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;def = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(defaultValue != &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;null &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;amp;&amp;amp; defaultValue.ToString() == item.GetRawConstantValue().ToString())&lt;br /&gt;            def = &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;selected=\&amp;quot;selected\&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EnumDisplayNameAttribute&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[] attributes = &lt;br /&gt;            (&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EnumDisplayNameAttribute&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[])item.GetCustomAttributes(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;typeof&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EnumDisplayNameAttribute&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;), &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;false&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;if &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(attributes.Length &amp;gt; 0)&lt;br /&gt;            sb.AppendFormat(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&amp;lt;option value=\&amp;quot;{0}\&amp;quot; {1}&amp;gt;{2}&amp;lt;/option&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;br /&gt;                item.GetRawConstantValue().ToString(), def, attributes[0].DisplayName);&lt;br /&gt;        &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;else&lt;br /&gt;            &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;sb.AppendFormat(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&amp;lt;option value=\&amp;quot;{0}\&amp;quot; {1}&amp;gt;{2}&amp;lt;/option&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;br /&gt;                item.GetRawConstantValue().ToString(), def, item.Name);&lt;br /&gt;    }&lt;br /&gt;    sb.Append(&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;&amp;lt;/select&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:blue;"&gt;return &lt;/span&gt;&lt;span style="-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;sb.ToString();&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;What do you think? Would you have done it differently?&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;font size="3" color="#800000"&gt;Updated:&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;In thinking about this, the next logical step would be to store the enumeration values in the database so they could be updated at runtime. While I’m not going to set about to do this right away, I would imagine pulling them when the application starts and caching them using a SQL cache dependency. Not too many things should be cached in application memory, but this list should stay relatively small. Thoughts?&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=682" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=FFW77bEZi-A:otLzcZZzOVY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=FFW77bEZi-A:otLzcZZzOVY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=FFW77bEZi-A:otLzcZZzOVY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=FFW77bEZi-A:otLzcZZzOVY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=FFW77bEZi-A:otLzcZZzOVY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=FFW77bEZi-A:otLzcZZzOVY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=FFW77bEZi-A:otLzcZZzOVY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=FFW77bEZi-A:otLzcZZzOVY:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=FFW77bEZi-A:otLzcZZzOVY:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=FFW77bEZi-A:otLzcZZzOVY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/FFW77bEZi-A" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/MVC/default.aspx">MVC</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/01/10/enumeration-based-dropdowns-in-net-mvc.aspx</feedburner:origLink></item><item><title>52’er</title><link>http://feedproxy.google.com/~r/dotneticated/~3/k1FRGfMqc58/52-er.aspx</link><pubDate>Sun, 04 Jan 2009 23:46:15 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:681</guid><dc:creator>Steve</dc:creator><slash:comments>1</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2009/01/04/52-er.aspx#comments</comments><description>&lt;p&gt;I was notified last week that I have been selected as an INETA NORAM speaker! I am quite honored, and excited to be a part of such a great team.&lt;/p&gt;  &lt;p&gt;Being New Years and all, I thought I would set a goal this year. Last year, I gave 48 presentations at 32 engagements. While most seem to think this is a lot, I would like to expand on that number this year. My goal? 52 engagements, 20 more than last year. So far I have scheduled 13 which brings me to 25% of my goal.&lt;/p&gt;  &lt;p&gt;If you need a speaker, if no one else can help, and if you can find me, maybe you can bring in: ME!&lt;/p&gt;  &lt;p&gt;Previous and upcoming engagement list: &lt;a href="http://www.platinumbay.com/about.aspx"&gt;http://www.platinumbay.com/about.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=681" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=k1FRGfMqc58:dqD79jEsl70:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=k1FRGfMqc58:dqD79jEsl70:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=k1FRGfMqc58:dqD79jEsl70:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=k1FRGfMqc58:dqD79jEsl70:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=k1FRGfMqc58:dqD79jEsl70:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=k1FRGfMqc58:dqD79jEsl70:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=k1FRGfMqc58:dqD79jEsl70:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=k1FRGfMqc58:dqD79jEsl70:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=k1FRGfMqc58:dqD79jEsl70:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=k1FRGfMqc58:dqD79jEsl70:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/k1FRGfMqc58" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Speaking/default.aspx">Speaking</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Community/default.aspx">Community</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/INETA/default.aspx">INETA</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2009/01/04/52-er.aspx</feedburner:origLink></item><item><title>Quotes</title><link>http://feedproxy.google.com/~r/dotneticated/~3/gCwwO3ax54c/quotes.aspx</link><pubDate>Mon, 15 Dec 2008 21:25:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:676</guid><dc:creator>Steve</dc:creator><slash:comments>0</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2008/12/15/quotes.aspx#comments</comments><description>&lt;p&gt;I like quotes, and those of you who follow &lt;a href="http://twitter.com/SteveAndrews"&gt;me&lt;/a&gt; on Twitter see me post them from time to time. I&amp;#39;ve decided, in part due to an &lt;a href="http://twitter.com/haacked/status/1059285121"&gt;open request&lt;/a&gt; from &lt;a href="http://twitter.com/haacked"&gt;Phil Haack&lt;/a&gt; for an inspirational quote, to catalog a few of my favorite quotes here:&lt;/p&gt;  &lt;p&gt;&amp;quot;Nothing will ever be attempted if all possible objections must first be overcome.&amp;quot;    &lt;br /&gt;- Samuel Johnson&lt;/p&gt;  &lt;p&gt;&amp;quot;Winning isn&amp;#39;t everything, but wanting to win is.&amp;quot;    &lt;br /&gt;- Vince Lombardi&lt;/p&gt;  &lt;p&gt;&amp;quot;If everything seems under control, you&amp;#39;re just not going fast enough.&amp;quot;    &lt;br /&gt;- Mario Andretti&lt;/p&gt;  &lt;p&gt;&amp;quot;Even if you are on the right track, you&amp;#39;ll get run over if you just sit there!&amp;quot;    &lt;br /&gt;- Will Rogers&lt;/p&gt;  &lt;p&gt;&amp;quot;What lies behind us, and what lies before us are tiny matters compared to what lies within us.&amp;quot;    &lt;br /&gt;- Ralph Waldo Emerson&lt;/p&gt;  &lt;p&gt;&amp;quot;If you do not hope, you will not find what is beyond your hopes.&amp;quot;    &lt;br /&gt;- St. Clement of Alexandra&lt;/p&gt;  &lt;p&gt;&amp;quot;Go confidently in the direction of your dreams. Live the life you&amp;#39;ve imagined.&amp;quot;    &lt;br /&gt;- Henry David Thoreau&lt;/p&gt;  &lt;p&gt;&amp;quot;Happiness is not achieved by the conscious pursuit of happiness; it is generally the by-product of other activities.&amp;quot;    &lt;br /&gt;- Aldous Huxley&lt;/p&gt;  &lt;p&gt;&amp;quot;Sometimes I think sensitive people are more capable of reflection because they have to shut the world out to function.&amp;quot;    &lt;br /&gt;- &lt;a href="http://twitter.com/mfeathers"&gt;@mfeathers&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;quot;What I think is interesting is that the people who are awed by greatness often become great themselves.&amp;quot;    &lt;br /&gt;- &lt;a href="http://twitter.com/mfeathers"&gt;@mfeathers&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;quot;We don&amp;#39;t see things as they are -- We see things as we are.&amp;quot;    &lt;br /&gt;- Anais Nin&lt;/p&gt;  &lt;p&gt;&amp;quot;When we are unable to find tranquility within ourselves, it is useless to seek it elsewhere.&amp;quot;    &lt;br /&gt;- Francois de La Rochefoucauld (1613 - 1680)&lt;/p&gt;  &lt;p&gt;&amp;quot;Success is a lousy teacher. It seduces smart people into thinking they can&amp;#39;t lose.&amp;quot;    &lt;br /&gt;- Bill Gates&lt;/p&gt;  &lt;p&gt;&amp;quot;If you don&amp;#39;t risk anything you risk even more.&amp;quot;    &lt;br /&gt;- Erica Jong&lt;/p&gt;  &lt;p&gt;&amp;quot;The world is moving so fast these days that the man who says it can&amp;#39;t be done is generally interrupted by someone doing it.&amp;quot;    &lt;br /&gt;- H.E. Fosdick&lt;/p&gt;  &lt;p&gt;&amp;quot;You cannot live a perfect day without doing something for someone who will never be able to repay you.&amp;quot;    &lt;br /&gt;- John Wooden&lt;/p&gt;  &lt;p&gt;&amp;quot;If you don&amp;#39;t set goals for yourself, you are doomed to work to achieve the goals of someone else.&amp;quot;    &lt;br /&gt;- Brian Tracy&lt;/p&gt;  &lt;p&gt;&amp;quot;Never lose the childlike wonder. It&amp;#39;s just too important. It&amp;#39;s what drives us.&amp;quot;    &lt;br /&gt;- Randy Pausch (1960-2008)&lt;/p&gt;  &lt;p&gt;&amp;quot;If you lead your life the right way, the karma will take care of itself. The dreams will come to you.&amp;quot;    &lt;br /&gt;- Randy Pausch (1960-2008)&lt;/p&gt;  &lt;p&gt;&amp;quot;There is only one success - to be able to spend your life in your own way.&amp;quot;    &lt;br /&gt;- Christopher Morley&lt;/p&gt;  &lt;p&gt;&amp;quot;It&amp;#39;s fine to celebrate success but it is more important to heed the lessons of failure.&amp;quot;    &lt;br /&gt;- Bill Gates&lt;/p&gt;  &lt;p&gt;&amp;quot;We can do no great things, just small things with great love. It is not how much you do, but how much love you put into doing it.&amp;quot;    &lt;br /&gt;- Mother Teresa&lt;/p&gt;  &lt;p&gt;&amp;quot;I always learn more from failure than from success.&amp;quot;    &lt;br /&gt;- Nick Malik&lt;/p&gt;  &lt;p&gt;&amp;quot;Never doubt that a small group of thoughtful committed citizens can change the world. Indeed it&amp;#39;s the only thing that ever has.&amp;quot;    &lt;br /&gt;- Margaret Mead&lt;/p&gt;  &lt;p&gt;&amp;quot;Change your thoughts and you change your world.&amp;quot;    &lt;br /&gt;- Norman Vincent Peale&lt;/p&gt;  &lt;p&gt;&amp;quot;Reality is a lot like an expensive wine, it won&amp;#39;t appeal to children.&amp;quot;    &lt;br /&gt;- Unknown&lt;/p&gt;  &lt;p&gt;&amp;quot;Imagination is more important that knowledge&amp;quot;    &lt;br /&gt;- Albert Einstein&lt;/p&gt;  &lt;p&gt;&amp;quot;I do not believe my energy and enthusiasm to be simply a factor of youth, but I am still young.&amp;quot;    &lt;br /&gt;- Unknown&lt;/p&gt;  &lt;p&gt;&amp;quot;No one is useless in this world who lightens the burden of it to anyone else.&amp;quot;    &lt;br /&gt;- Charles Dickens&lt;/p&gt;  &lt;p&gt;&amp;quot;It was in my heart to help a little because I was helped much.&amp;quot;    &lt;br /&gt;- Kahlil Gibran&lt;/p&gt;  &lt;p&gt;&amp;quot;We can&amp;#39;t solve problems by using the same kind of thinking we used when we created them.&amp;quot;    &lt;br /&gt;- Albert Einstein&lt;/p&gt;  &lt;p&gt;&amp;quot;Never trade reputation for money.&amp;quot;    &lt;br /&gt;- Warren Buffet&lt;/p&gt;  &lt;p&gt;“Learn from yesterday, live for today, hope for tomorrow.”   &lt;br /&gt;- Albert Einstein&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=676" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=gCwwO3ax54c:Tgt0_p5ZPL4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=gCwwO3ax54c:Tgt0_p5ZPL4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=gCwwO3ax54c:Tgt0_p5ZPL4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=gCwwO3ax54c:Tgt0_p5ZPL4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=gCwwO3ax54c:Tgt0_p5ZPL4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=gCwwO3ax54c:Tgt0_p5ZPL4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=gCwwO3ax54c:Tgt0_p5ZPL4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=gCwwO3ax54c:Tgt0_p5ZPL4:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=gCwwO3ax54c:Tgt0_p5ZPL4:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=gCwwO3ax54c:Tgt0_p5ZPL4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/gCwwO3ax54c" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Personal+_1320_+Off+Topic/default.aspx">Personal – Off Topic</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2008/12/15/quotes.aspx</feedburner:origLink></item><item><title>Windows Live Writer</title><link>http://feedproxy.google.com/~r/dotneticated/~3/9wSKmr5Kbhc/windows-live-writer.aspx</link><pubDate>Sat, 13 Dec 2008 18:33:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:672</guid><dc:creator>Steve</dc:creator><slash:comments>1</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2008/12/13/windows-live-writer.aspx#comments</comments><description>&lt;p&gt;So I finally caved into pressure and am writing this post from Windows Live Writer. After some hassle with the install on Win2K8 (thanks to &lt;a href="http://twitter.com/ninob"&gt;@ninob&lt;/a&gt; for pointing me &lt;a href="http://derekhorton.spaces.live.com/blog/cns!B1E5E2870AF59CDF!228.entry"&gt;here&lt;/a&gt;), I set about to write my first post. I do what I normally do; open the program and hit Maximize. Clearly Windows Live Writer wasn&amp;#39;t designed to be maximized (see screenshot), at least not at 1920x1200. And yes, I am going to be highly critical of it, at least compared to my experience using Word 2007 for writing posts.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="238" alt="image" src="http://www.platinumbay.com/blogs/postimages/WindowsLiveWriter_BC90/image.png" width="244" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;No test would be complete without the obligatory code snippet. First results were that all the formatting were lost. Weird. Word does this out of the box. Fortunately I found the Paste from Visual Studio add-in, which gives me this:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public static string &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;LabelFor(&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;this &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;HtmlHelper &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;helper, &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;string &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;target, &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;string &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;text)
{
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;return &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;String&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;.Format(&lt;/span&gt;&lt;span style="background:#fefefe;color:#a31515;"&gt;&amp;quot;&amp;lt;label for=&amp;#39;{0}&amp;#39;&amp;gt;{1}&amp;lt;/label&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;, target, text); 
}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Now to see how everything looks online...&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=672" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9wSKmr5Kbhc:4A4zwJunl_A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=9wSKmr5Kbhc:4A4zwJunl_A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9wSKmr5Kbhc:4A4zwJunl_A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=9wSKmr5Kbhc:4A4zwJunl_A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9wSKmr5Kbhc:4A4zwJunl_A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9wSKmr5Kbhc:4A4zwJunl_A:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=9wSKmr5Kbhc:4A4zwJunl_A:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9wSKmr5Kbhc:4A4zwJunl_A:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9wSKmr5Kbhc:4A4zwJunl_A:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=9wSKmr5Kbhc:4A4zwJunl_A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/9wSKmr5Kbhc" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/blog/default.aspx">blog</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Personal+_1320_+Off+Topic/default.aspx">Personal – Off Topic</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2008/12/13/windows-live-writer.aspx</feedburner:origLink></item><item><title>DevEvents – The Generic Repository</title><link>http://feedproxy.google.com/~r/dotneticated/~3/_JZeBmsddvE/devevents-the-generic-repository.aspx</link><pubDate>Sat, 13 Dec 2008 08:21:00 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:670</guid><dc:creator>Steve</dc:creator><slash:comments>2</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2008/12/13/devevents-the-generic-repository.aspx#comments</comments><description>&lt;p&gt;Let it be said that I strongly dislike code duplication. For that matter, I also strongly dislike repetitive typing. Yet as I started to build out DevEvents, I found myself frequently duplicating similar code across object repositories, and typing the same base statements. In these cases, I typically create a base class to take care of the duplicated functionality, and inherit the dependant classes from the base. With the object repositories however, each duplicated section of code was slightly dependant on the object type. Not to be deterred, I ended up creating a custom generics-based repository implementation that virtually eliminated the code duplication. But let&amp;#39;s start from the beginning. &lt;/p&gt;  &lt;p&gt;DevEvents is built on top of a LINQ to SQL model which lives in its own assembly. That assembly is then referenced from a Components layer in which the repositories live. A typical repository implementation might look like this:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public class &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;OldLogRepository &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;: &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;IOldLogRepository
&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;{
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;private &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;DEDataContext &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;db;

    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;OldLogRepository()
    {
        db = &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;new &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;DEDataContext&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;();
    }
&lt;/span&gt;&lt;span style="background:#fefefe;color:green;"&gt;
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;internal &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;OldLogRepository(&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;DEDataContext &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;context)
    {
        db = context;
    }

    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public int &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;GetLogEntryCount()
    {
        &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;return &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;db.Logs.Count();
    }

    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public void &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;ClearLogEntriesBefore(&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;DateTime &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;dateTime)
    {
        &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;var &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;query = (&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;from &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;le &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;in &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;db.Logs
                    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;where &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;le.EventDate &amp;lt;= dateTime
                    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;select &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;le);

        db.Logs.DeleteAllOnSubmit(query);
    }
}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;I feel this is a pretty standard repository implementation, and it helps promote loose coupling at several levels. First, the repository itself is interface-based which means it can be swapped out if necessary. Second, the internal constructor allows for dependency injection of a non-default data context. &lt;/p&gt;

&lt;p&gt;My frustration arose when I had to duplicate a lot of the standard functionality across dozens of repositories, such as Count, Create, Delete, Update, Select, etc. The first idea was to create a base class to house that functionality, but as shown in the &lt;span style="font-size:10pt;"&gt;&lt;span style="font-family:courier new;"&gt;ClearLogEntriesBefore&lt;/span&gt; &lt;/span&gt;method above, there was some object specific logic in the methods. I realized however, that the method could be broken up into different parts: the query, the context, and the table. A quick check of the model code confirmed this, and I set about to create a generic repository implementation to reduce or eliminate the amount of redundant code. I started with an abstract generic class:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public abstract class &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;BaseRepository&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;TModel&amp;gt; : &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;IBaseRepository&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;TModel&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Next, I created the core fields and constructor:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;protected &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;DEDataContext &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;db;
&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;protected &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Table&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;TModel&amp;gt; _table;

&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;BaseRepository(&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Table&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;TModel&amp;gt; table)
{
    db = &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;new &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;DEDataContext&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;();
    _table = table;
}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Note that the default constructor tables a parameter of type &lt;span style="font-size:10pt;font-family:courier new;"&gt;System.Data.Linq.&lt;span style="background:#fefefe;color:#2b91af;"&gt;Table&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;TEntity&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;. This is the base type of all entity objects, and allows the base class to handle generic table operations on the correct table. &lt;/p&gt;

&lt;p&gt;So far I have taken care of the context and the table parts of my original duplicated methods. Next, I needed to solve the query problem. When I examined the method signature for operations such as &lt;span style="font-size:10pt;"&gt;&lt;span style="font-family:courier new;"&gt;Where&lt;/span&gt; &lt;/span&gt;and &lt;span style="font-size:10pt;font-family:courier new;"&gt;Select&lt;/span&gt;, I discovered that they all took a parameter of type &lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Expression&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Func&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;TModel, &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;bool&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;. What this means is that it is possible to pass parameters as a known base type. The base &lt;span style="font-size:10pt;font-family:courier new;"&gt;Contains&lt;/span&gt; method could now be written as:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public bool &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;Contains(&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Expression&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Func&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;TModel, &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;bool&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;gt;&amp;gt; predicate)
{
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;return &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;_table.Any(predicate);
}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;From the top level repository class, I could then call &lt;span style="font-size:10pt;font-family:courier new;"&gt;Contains&lt;/span&gt; as follows:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;return &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;Contains(le =&amp;gt; le.SomeProperty == someValue);&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Using this methodology I was able to create a number of base methods, such as Count. The next step was basic CRUD operations; Create, Select, Update and Delete. &lt;/p&gt;

&lt;p&gt;Create is fairly straightforward:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public void &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;Create(TModel model, &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;bool &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;save)
{
    _table.InsertOnSubmit(model);
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;if &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;(save)
        _table.Context.SubmitChanges();
}

&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public void &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;Create(&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;IEnumerable&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;TModel&amp;gt; models, &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;bool &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;save)
{
&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;    _table.InsertAllOnSubmit(models);
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;if &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;(save)
        _table.Context.SubmitChanges();
}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;You might be wondering about the save parameter. In LINQ to SQL, entities added to the context are not saved to the database until &lt;span style="font-size:10pt;font-family:courier new;"&gt;&lt;span style="background-color:white;"&gt;SubmitChanges&lt;/span&gt;()&lt;/span&gt; is called. There are certain instances in the application where it is preferable to add a group of entities, and then commit them to the database. &lt;/p&gt;

&lt;p&gt;Delete and select got a little more complicated, since I am &lt;i&gt;optionally&lt;/i&gt; passing a predicate of type &lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Expression&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Func&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;TModel, &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;bool&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;. The answer lies in the fact that &lt;span style="font-family:courier new;"&gt;IQueryable&lt;/span&gt; types are just that until they are invoked, a query. This means that I can refine the query, such as is done in the &lt;span style="font-size:10pt;"&gt;&lt;span style="font-family:courier new;"&gt;Delete&lt;/span&gt; &lt;/span&gt;method:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;protected void &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;Delete(&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Expression&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Func&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;TModel, &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;bool&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;gt;&amp;gt; predicate)
{
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;var &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;list = (&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;from &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;e &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;in &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;_table
                &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;select &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;e);

    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;if &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;(predicate != &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;null&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;)
        list = list.Where(predicate);

    _table.DeleteAllOnSubmit(list);
    _table.Context.SubmitChanges();
}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;You will notice that the &lt;span style="font-size:10pt;font-family:courier new;"&gt;Delete&lt;/span&gt; method is marked as &lt;span style="font-size:10pt;font-family:courier new;"&gt;Protected&lt;/span&gt;. This is to prevent it from being called outside of the repository, thereby enforcing interaction with the top-level repository methods to perform repository operations. For that matter, the &lt;span style="font-size:10pt;"&gt;&lt;span style="font-family:courier new;"&gt;db&lt;/span&gt; &lt;/span&gt;field in &lt;span style="font-size:10pt;"&gt;&lt;span style="font-family:courier new;"&gt;BaseRepository&lt;/span&gt; &lt;/span&gt;should be marked as private to ensure it is the single point of responsibility for the data context, but there is some cleanup to do, and I digress. &lt;/p&gt;

&lt;p&gt;Select is similar, except that it is implemented across multiple methods: &lt;span style="font-size:10pt;font-family:courier new;"&gt;LoadByQuery&lt;/span&gt;, &lt;span style="font-size:10pt;font-family:courier new;"&gt;LoadAllByQuery&lt;/span&gt;, &lt;span style="font-size:10pt;"&gt;&lt;span style="font-family:courier new;"&gt;LoadTopByQuery&lt;/span&gt; &lt;/span&gt;and &lt;span style="font-size:10pt;font-family:courier new;"&gt;LoadAll&lt;/span&gt;, all of which have overrides to optionally take a &lt;font face="Courier New" size="2"&gt;DataLoadOptions&lt;/font&gt; object. There are also a couple specialized methods to pull data in a serializable format. &lt;span style="font-size:10pt;font-family:courier new;"&gt;LoadAllByQuery&lt;/span&gt; is shown here implementing query refinements:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;protected &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;IQueryable&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;TModel&amp;gt; LoadAllByQuery(&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Expression&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Func&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;TModel, &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;bool&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;gt;&amp;gt; predicate)
{
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;return &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;LoadAllByQuery(predicate, &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;null&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;);
}

&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;protected &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;IQueryable&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;TModel&amp;gt; LoadAllByQuery(&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Expression&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Func&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;TModel, &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;bool&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;gt;&amp;gt; predicate, &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;DataLoadOptions &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;dlo)
{
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;if &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;(dlo != &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;null&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;)
        db.LoadOptions = dlo;

    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;var &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;list = (&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;from &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;e &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;in &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;_table
                &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;select &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;e);

    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;if &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;(predicate != &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;null&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;)
        list = list.Where(predicate);

    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;return &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;list;
}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;With the generics-based repository implementation in place, I can now rewrite the original &lt;span style="font-size:10pt;"&gt;&lt;span style="font-family:courier new;"&gt;LogRepository&lt;/span&gt; &lt;/span&gt;as follows:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public sealed class &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;LogRepository &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;: &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;BaseRepository&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Log&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;gt;, &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;ILogRepository
&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;{
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;LogRepository()
        : &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;base&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;(&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;new &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;DEDataContext&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;().Logs)
    {
    }

    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public void &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;ClearLogEntriesBefore(&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;DateTime &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;dateTime)
    {
        Delete(l =&amp;gt; l.EventDate &amp;lt; dateTime);
    }
&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;First, you will notice that there are significantly fewer lines of code (eleven versus twenty-three), and what is there is much less complex. Second, the &lt;span style="font-size:10pt;"&gt;&lt;span style="font-family:courier new;"&gt;Count&lt;/span&gt; &lt;/span&gt;method is no longer included. Since the &lt;span style="font-size:10pt;font-family:courier new;"&gt;Count&lt;/span&gt; method is in the base class and marked as &lt;span style="font-size:10pt;font-family:courier new;"&gt;Public&lt;/span&gt;, it can be called directly from the instantiated object.&lt;/p&gt;

&lt;p&gt;Here is another method from the Log repository, made simpler through its interaction with the base methods:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#fefefe;color:blue;"&gt;public &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;IQueryable&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;Log&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;&amp;gt; GetLogEventsPaged(&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;int &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;pageID)
{
    &lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;return &lt;/span&gt;&lt;span style="background:#fefefe;"&gt;LoadAllByQuery(&lt;/span&gt;&lt;span style="background:#fefefe;color:blue;"&gt;null&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;)
            .Skip(((pageID - 1) * &lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;DEContext&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;.Current.PageSize))
            .Take(&lt;/span&gt;&lt;span style="background:#fefefe;color:#2b91af;"&gt;DEContext&lt;/span&gt;&lt;span style="background:#fefefe;"&gt;.Current.PageSize);
}&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;I have found a generics-based repository to be incredibly useful and efficient for my purpose. So my question to you, dear reader, is what do you think? How would you improve upon this implementation to make it better?&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=670" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=_JZeBmsddvE:ldoGiddKzHA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=_JZeBmsddvE:ldoGiddKzHA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=_JZeBmsddvE:ldoGiddKzHA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=_JZeBmsddvE:ldoGiddKzHA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=_JZeBmsddvE:ldoGiddKzHA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=_JZeBmsddvE:ldoGiddKzHA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=_JZeBmsddvE:ldoGiddKzHA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=_JZeBmsddvE:ldoGiddKzHA:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=_JZeBmsddvE:ldoGiddKzHA:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=_JZeBmsddvE:ldoGiddKzHA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/_JZeBmsddvE" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/DevEvents/default.aspx">DevEvents</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2008/12/13/devevents-the-generic-repository.aspx</feedburner:origLink></item><item><title>What’s In Your Quick Launch Bar?</title><link>http://feedproxy.google.com/~r/dotneticated/~3/ZBO52UHtPs0/what-s-in-your-quick-launch-bar.aspx</link><pubDate>Tue, 09 Dec 2008 03:11:48 GMT</pubDate><guid isPermaLink="false">643c9627-9341-4fbb-b075-f2ccb6a51baa:650</guid><dc:creator>Steve</dc:creator><slash:comments>1</slash:comments><comments>http://www.platinumbay.com/blogs/dotneticated/archive/2008/12/08/what-s-in-your-quick-launch-bar.aspx#comments</comments><description>&lt;p&gt;Heartland Developer Evangelist Jeff Blankenburg &lt;a href="http://jeffblankenburg.com/2008/10/whats-in-your-quick-launch-bar.aspx"&gt;blogged&lt;/a&gt; today about his quick launch bar and the apps he has positioned there. He also encouraged others to do the same, I&amp;#39;d imagine out of pure curiosity.
&lt;/p&gt;&lt;p&gt;Here is mine, broken up because I run at 1900x1200:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.platinumbay.com/blogs/postimages/120908_0311_WhatsInYour1.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;And here is it in list view with names, and sorted alphabetically:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.platinumbay.com/blogs/postimages/120908_0311_WhatsInYour2.gif" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;The crazy part? I use all this stuff! In case you&amp;#39;re wondering, I run Windows Server 2008.
&lt;/p&gt;&lt;p&gt;So what does your quick launch bar look like?&lt;/p&gt;&lt;img src="http://www.platinumbay.com/aggbug.aspx?PostID=650" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ZBO52UHtPs0:CfJZTyv8vig:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=ZBO52UHtPs0:CfJZTyv8vig:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ZBO52UHtPs0:CfJZTyv8vig:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=ZBO52UHtPs0:CfJZTyv8vig:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ZBO52UHtPs0:CfJZTyv8vig:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ZBO52UHtPs0:CfJZTyv8vig:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?i=ZBO52UHtPs0:CfJZTyv8vig:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ZBO52UHtPs0:CfJZTyv8vig:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ZBO52UHtPs0:CfJZTyv8vig:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dotneticated?a=ZBO52UHtPs0:CfJZTyv8vig:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dotneticated?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dotneticated/~4/ZBO52UHtPs0" height="1" width="1"/&gt;</description><category domain="http://www.platinumbay.com/blogs/dotneticated/archive/tags/Personal+_1320_+Off+Topic/default.aspx">Personal – Off Topic</category><feedburner:origLink>http://www.platinumbay.com/blogs/dotneticated/archive/2008/12/08/what-s-in-your-quick-launch-bar.aspx</feedburner:origLink></item></channel></rss>
