<?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:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-8031142319236689228</atom:id><lastBuildDate>Tue, 09 Mar 2010 13:14:46 +0000</lastBuildDate><title>Web 2.0 ASP.NET</title><description>A blog about ASP.NET, Web 2.0, AJAX, SQL server and other web technologies. Helping the little guy win!</description><link>http://web2asp.net/</link><managingEditor>noreply@blogger.com (David Ridgway)</managingEditor><generator>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/web2aspnetfeed" /><feedburner:info uri="web2aspnetfeed" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license><feedburner:emailServiceId>web2aspnetfeed</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-3935111346014128083</guid><pubDate>Fri, 08 Jan 2010 09:26:00 +0000</pubDate><atom:updated>2010-01-08T22:48:11.755+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">FTP</category><category domain="http://www.blogger.com/atom/ns#">Upload multiple files to multiple sites via FTP</category><category domain="http://www.blogger.com/atom/ns#">WS_FTP</category><title>Updating Multiple ASP.NET Sites by FTP</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KN-5b6HrTaeG9o2gKc07AHYi7qw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KN-5b6HrTaeG9o2gKc07AHYi7qw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KN-5b6HrTaeG9o2gKc07AHYi7qw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KN-5b6HrTaeG9o2gKc07AHYi7qw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Imagine a scenario where you have around 100 ASP.NET web sites all using the same code base, which each consume site specific data from the same database and have several thousand dynamic pages each! Sounds daunting doesn’t it? Once you have all these sites configured that is ok for the time being, but what happens if you want to update all of these sites with a new version of the code? Some of you will already be shouting bad architecture, but if if a client wants dedicated IP addresses for each site and you intend to do caching in any meaningful way then separate sites with separate resources on potentially different web servers and even on different hosting companies does make some sense.&lt;br /&gt;
&lt;br /&gt;
I first looked into using an FTP library like: &lt;a href="http://www.codeproject.com/KB/IP/ftplib.aspx" title="http://www.codeproject.com/KB/IP/ftplib.aspx"&gt;http://www.codeproject.com/KB/IP/ftplib.aspx&lt;/a&gt; but soon realized that any hand rolled application would need to be robust enough to handle connection problems and update failures etc. It was then that I realized I already owned a tool that could with a little effort take care of the job.&lt;br /&gt;
&lt;h2&gt;WS_FTP Professional&lt;/h2&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_A5nDBL4BxPI/S0b-KixkhyI/AAAAAAAAAfs/_j6Q9cvVIBo/s1600-h/ws_ftp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="205" src="http://3.bp.blogspot.com/_A5nDBL4BxPI/S0b-KixkhyI/AAAAAAAAAfs/_j6Q9cvVIBo/s320/ws_ftp.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;With any tool there is certainly going to be some setup required and to make this solution work I did in fact create all 100 or so sites in the WS_FTP GUI, while you can save a sites individual ftp settings within the Visual Studio IDE it certainly cannot handle the scenario I am describing in this post. The cool thing about &lt;a href="http://www.dpbolvw.net/click-3397259-10572703"&gt;WS_FTP Professional&lt;/a&gt; is that it ships with a scripting tool and is also a great way to manage a myriad of FTP connections and allows you to name them and group them into appropriate categories of your choosing. The scripting language itself is also easy to use (and remember) and is very powerful. Obviously once you create a script you can save it and also use the WS_FTP scheduler to run scripts at convenient times (in the middle of the night to cause the least disruption!)&lt;br /&gt;
A simple example:&lt;br /&gt;
&lt;br /&gt;
CONNECT "My Sites!Mysitename.info"   &lt;br /&gt;
LCD “C://NewFiles”    &lt;br /&gt;
CD “bin”&amp;nbsp; &lt;br /&gt;
RDEL “*”    &lt;br /&gt;
RPUT “*”    &lt;br /&gt;
CLOSE&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_A5nDBL4BxPI/S0b-wNwuYiI/AAAAAAAAAgE/IAMVjNcpXTg/s1600-h/scriptingtool.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="312" src="http://3.bp.blogspot.com/_A5nDBL4BxPI/S0b-wNwuYiI/AAAAAAAAAgE/IAMVjNcpXTg/s320/scriptingtool.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
Here the script simply connects to a site in the My Sites group (think of the exclamation mark as a /), navigates to the folder locally where the new files are located, navigates to the bin folder of the remote site, deletes the contents, uploads the new files and finally closes the connection.   &lt;br /&gt;
&lt;br /&gt;
This is a simple example but you can target specific files and navigate folders during the same session, you can also download files. Even so writing a 100 of these for a single update is still a little annoying and sadly there is no for each loop to iterate through the sites in the "My Sites Group" part in the scripting language. What worked for me was to write a small Winforms app which helps me write the scripts using placeholders. This application reads the site names from a small data store and uses syntax like:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_A5nDBL4BxPI/S0b-lzsIB4I/AAAAAAAAAf8/-EOlJeEVhh0/s1600-h/scriptbuilder.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="186" src="http://4.bp.blogspot.com/_A5nDBL4BxPI/S0b-lzsIB4I/AAAAAAAAAf8/-EOlJeEVhh0/s320/scriptbuilder.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
CONNECT “#SiteName#”   &lt;br /&gt;
LCD “#LocalSiteFolder#”    &lt;br /&gt;
DEL “web.config”    &lt;br /&gt;
PUT “web.config”    &lt;br /&gt;
CLOSE    &lt;br /&gt;
&lt;br /&gt;
When I click the go button in the Winform, the application generates a script for each of the sites, replacing the placeholders (e.g. #SiteName#) with the appropriate text. This works well too if, as in my scenario, the web.config file for each site has site specific settings, so in the example above I am able to target the folder for that specific site (which contains site specific files) and specify a file in it (this also works well for CSS files as each site has it's own theme).&lt;br /&gt;
&lt;br /&gt;
All I need do is save the script and schedule it to run or simply paste it directly into the WS_FTP scripting utility and let it go about it's business. The &lt;a href="http://www.dpbolvw.net/click-3397259-10572703" rel="nofollow" title="WS_FTP"&gt;WS_FTP&lt;/a&gt; Scripting Tool also has a log panel, so you can see if an update has failed for whatever reason.&lt;br /&gt;
&lt;br /&gt;
As you can see with a little effort and the right tool you can turn a maintenance nightmare into a relatively painless exercise.&lt;br /&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweb2asp.net%2f2010%2f01%2fupdating-multiple-aspnet-sites-by-ftp.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweb2asp.net%2f2010%2f01%2fupdating-multiple-aspnet-sites-by-ftp.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.jdoqocy.com/click-3397259-10572683" target="_top"&gt;&lt;br /&gt;
&lt;img alt="USA: NEW! WS_FTP Professional 12 no support" border="0" height="60" src="http://www.lduhtrp.net/image-3397259-10572683" width="468" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-3935111346014128083?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=7ja28AbngKA:Xgl6_mccMl0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=7ja28AbngKA:Xgl6_mccMl0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=7ja28AbngKA:Xgl6_mccMl0:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=7ja28AbngKA:Xgl6_mccMl0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=7ja28AbngKA:Xgl6_mccMl0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=7ja28AbngKA:Xgl6_mccMl0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=7ja28AbngKA:Xgl6_mccMl0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=7ja28AbngKA:Xgl6_mccMl0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=7ja28AbngKA:Xgl6_mccMl0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=7ja28AbngKA:Xgl6_mccMl0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=7ja28AbngKA:Xgl6_mccMl0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/7ja28AbngKA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/7ja28AbngKA/updating-multiple-aspnet-sites-by-ftp.html</link><author>noreply@blogger.com (David Ridgway)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_A5nDBL4BxPI/S0b-KixkhyI/AAAAAAAAAfs/_j6Q9cvVIBo/s72-c/ws_ftp.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://web2asp.net/2010/01/updating-multiple-aspnet-sites-by-ftp.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-6473205563058488013</guid><pubDate>Sun, 25 Oct 2009 12:59:00 +0000</pubDate><atom:updated>2010-02-13T16:32:23.336+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Resharper Discount Coupon</category><category domain="http://www.blogger.com/atom/ns#">Resharper Discount</category><category domain="http://www.blogger.com/atom/ns#">ReSharper 5</category><category domain="http://www.blogger.com/atom/ns#">ReSharper Extended Trial Period</category><category domain="http://www.blogger.com/atom/ns#">Resharper</category><category domain="http://www.blogger.com/atom/ns#">Jetbrains ReSharper</category><category domain="http://www.blogger.com/atom/ns#">JetBrains</category><category domain="http://www.blogger.com/atom/ns#">Free Upgrade to ReSharper 5</category><title>ReSharper Discount Coupon and Free Upgrade to ReSharper 5.0</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/imbOFVouE6MiUt2VQmwZX6GCO3E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/imbOFVouE6MiUt2VQmwZX6GCO3E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/imbOFVouE6MiUt2VQmwZX6GCO3E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/imbOFVouE6MiUt2VQmwZX6GCO3E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;[edit 1st Feb 2010] Still available[/edit]&lt;br /&gt;
If a 10% ReSharper rebate discount code and a 60 day extended trial wasn’t enough! For a limited time only, if you purchase ReSharper 4.5 now (after October 15th, 2009), you can receive a free upgrade to version 5.0&lt;/p&gt;&lt;p&gt;To take advantage of this offer and to receive a 60 day extended trial license and 10% ReSharper discount coupon, please email me at:&lt;/p&gt;&lt;a href='mailto:&amp;#119;&amp;#101;&amp;#098;&amp;#050;&amp;#097;&amp;#115;&amp;#112;&amp;#064;&amp;#108;&amp;#105;&amp;#118;&amp;#101;&amp;#046;&amp;#099;&amp;#111;&amp;#109;'&gt;&amp;#119;&amp;#101;&amp;#098;&amp;#050;&amp;#097;&amp;#115;&amp;#112;&amp;#064;&amp;#108;&amp;#105;&amp;#118;&amp;#101;&amp;#046;&amp;#099;&amp;#111;&amp;#109;&lt;/a&gt;&lt;p&gt;I completely respect your privacy so your email address will ONLY be used to send you the details and NOTHING else.&lt;/p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweb2asp.net%2f2009%2f10%2fresharper-discount-and-free-upgrade-to.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweb2asp.net%2f2009%2f10%2fresharper-discount-and-free-upgrade-to.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;a rev="vote-for" href="http://dotnetshoutout.com/ReSharper-Discount-and-Free-Upgrade-to-ReSharper-5"&gt;&lt;img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fweb2asp.net%2F2009%2F10%2Fresharper-discount-and-free-upgrade-to.html" style="border:0px"/&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-6473205563058488013?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=xGDhOwfpZTM:_fV1Fk7BwUQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=xGDhOwfpZTM:_fV1Fk7BwUQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=xGDhOwfpZTM:_fV1Fk7BwUQ:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=xGDhOwfpZTM:_fV1Fk7BwUQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=xGDhOwfpZTM:_fV1Fk7BwUQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=xGDhOwfpZTM:_fV1Fk7BwUQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=xGDhOwfpZTM:_fV1Fk7BwUQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=xGDhOwfpZTM:_fV1Fk7BwUQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=xGDhOwfpZTM:_fV1Fk7BwUQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=xGDhOwfpZTM:_fV1Fk7BwUQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=xGDhOwfpZTM:_fV1Fk7BwUQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/xGDhOwfpZTM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/xGDhOwfpZTM/resharper-discount-and-free-upgrade-to.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">48</thr:total><feedburner:origLink>http://web2asp.net/2009/10/resharper-discount-and-free-upgrade-to.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-2936177205194222827</guid><pubDate>Sat, 03 Oct 2009 02:02:00 +0000</pubDate><atom:updated>2009-10-03T11:08:09.547+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Development Tools</category><category domain="http://www.blogger.com/atom/ns#">JQuery</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET MVC 2 Preview 2</category><category domain="http://www.blogger.com/atom/ns#">Announcement</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET MVC</category><category domain="http://www.blogger.com/atom/ns#">Client-side validation</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET MOBILE CONTROLS MVC</category><title>ASP.NET MVC 2 Preview 2 Released</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ENZ-9iOYgZPYRu3e89wS9cTPa24/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ENZ-9iOYgZPYRu3e89wS9cTPa24/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ENZ-9iOYgZPYRu3e89wS9cTPa24/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ENZ-9iOYgZPYRu3e89wS9cTPa24/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Hot on the heels of ASP.NET MVC 2 preview 1, released a mere 2 months ago (great work MS that’s agile as hell), Phil Haack announced yesterday that ASP.NET MVC 2 Preview 2 is now ready for download! you can get yours here:&lt;/p&gt;  &lt;p&gt;&lt;a title="ASP.NET MVC 2 Preview 2 Download" href="http://go.microsoft.com/fwlink/?LinkID=154414" rel="nofollow" target="_blank"&gt;ASP.NET MVC 2 Preview 2 Download&lt;/a&gt;    &lt;br /&gt;    &lt;br /&gt;For those of you familiar with Preview 1, where the focus was primarily on data annotation, Preview 2 builds heavily on this, with the addition and inclusion of client-side validation via the JQuery validation library. Although users of other libraries need not flinch! You can easily write a client adapter for the JSON Metadata, so you are not chained to the JQuery validation library by any means.&lt;/p&gt;  &lt;p&gt;My personal favorite is the addition of Single Project Areas, which essentially means that you can divide out your MVC application pretty much how you would like, without having to have multiple projects. With this preview the registration of Areas has also been simplified, so it works real nice with little effort.&lt;/p&gt;  &lt;p&gt;VS2010 users should be aware that the tools for Preview 2 only work with VS2008 SP1 so you will need to wait for beta 2 before you will be able to try out HtmlEncoding code blocks and the like.&lt;/p&gt;  &lt;p&gt;I still think it is a crying shame Rob Conery has left the Microsoft fold it would be SERIOUSLY great to have subsonic integrated totally into the MVC framework and an integral part of VS2010. That’s just my 2 cents worth!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-2936177205194222827?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=vrhcomU0fNs:1Eu7o0azUnU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=vrhcomU0fNs:1Eu7o0azUnU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=vrhcomU0fNs:1Eu7o0azUnU:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=vrhcomU0fNs:1Eu7o0azUnU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=vrhcomU0fNs:1Eu7o0azUnU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=vrhcomU0fNs:1Eu7o0azUnU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=vrhcomU0fNs:1Eu7o0azUnU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=vrhcomU0fNs:1Eu7o0azUnU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=vrhcomU0fNs:1Eu7o0azUnU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=vrhcomU0fNs:1Eu7o0azUnU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=vrhcomU0fNs:1Eu7o0azUnU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/vrhcomU0fNs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/vrhcomU0fNs/aspnet-mvc-2-preview-2-released.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://web2asp.net/2009/10/aspnet-mvc-2-preview-2-released.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-599986257191952476</guid><pubDate>Fri, 11 Sep 2009 13:10:00 +0000</pubDate><atom:updated>2010-02-02T21:32:13.026+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Extended Trial Period</category><category domain="http://www.blogger.com/atom/ns#">Discount Coupon</category><category domain="http://www.blogger.com/atom/ns#">Resharper</category><category domain="http://www.blogger.com/atom/ns#">JetBrains</category><title>ReSharper Discount and Extended Trial Still Available</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6B8vGFm_xh15Z37otZz44zOBhT8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6B8vGFm_xh15Z37otZz44zOBhT8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6B8vGFm_xh15Z37otZz44zOBhT8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6B8vGFm_xh15Z37otZz44zOBhT8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;[Edit 1st Feb 2010]10% Discount and Free Upgrade to ReSharper 5 Still available[/Edit]&lt;br /&gt;
&lt;p&gt;I have had a few emails recently asking if I am still able to obtain the 10% discount coupons and 60 day extended trial for ReSharper as the original post was in January this year. The good news is &lt;strong&gt;YES&lt;/strong&gt; they are still available, so for any of you who would still like to try it out, just drop me an email to:&lt;/p&gt;&lt;a href='mailto:&amp;#119;&amp;#101;&amp;#098;&amp;#050;&amp;#097;&amp;#115;&amp;#112;&amp;#064;&amp;#108;&amp;#105;&amp;#118;&amp;#101;&amp;#046;&amp;#099;&amp;#111;&amp;#109;'&gt;&amp;#119;&amp;#101;&amp;#098;&amp;#050;&amp;#097;&amp;#115;&amp;#112;&amp;#064;&amp;#108;&amp;#105;&amp;#118;&amp;#101;&amp;#046;&amp;#099;&amp;#111;&amp;#109;&lt;/a&gt;  &lt;p&gt;The trial license is for the full version of ReSharper, the discount coupon can be used for any of the license types, including commercial licences and the VB and C# only versions (and upgrades from previous versions). It also works for multiple purchases so it can add up to quite a substantial discount.&lt;/p&gt;&lt;p&gt;I respect your privacy so your email address will only be used to send you the details and NOTHING else! &lt;br /&gt;
[Edit 24th October 2009]Jetbrains just let me know that for a limited time, if you buy a ReSharper license now, then you get version 5 for free when it is released.[/Edit]&lt;/p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweb2asp.net%2f2009%2f09%2fresharper-discount-and-extended-trial.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweb2asp.net%2f2009%2f09%2fresharper-discount-and-extended-trial.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;a rev="vote-for" href="http://dotnetshoutout.com/ReSharper-Discount-and-Extended-Trial"&gt;&lt;img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fweb2asp.net%2F2009%2F09%2Fresharper-discount-and-extended-trial.html" style="border:0px"/&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-599986257191952476?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=8KXXDHZJwVw:q8rt8UCRsq8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=8KXXDHZJwVw:q8rt8UCRsq8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=8KXXDHZJwVw:q8rt8UCRsq8:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=8KXXDHZJwVw:q8rt8UCRsq8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=8KXXDHZJwVw:q8rt8UCRsq8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=8KXXDHZJwVw:q8rt8UCRsq8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=8KXXDHZJwVw:q8rt8UCRsq8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=8KXXDHZJwVw:q8rt8UCRsq8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=8KXXDHZJwVw:q8rt8UCRsq8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=8KXXDHZJwVw:q8rt8UCRsq8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=8KXXDHZJwVw:q8rt8UCRsq8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/8KXXDHZJwVw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/8KXXDHZJwVw/resharper-discount-and-extended-trial.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">32</thr:total><feedburner:origLink>http://web2asp.net/2009/09/resharper-discount-and-extended-trial.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-1002910801058612502</guid><pubDate>Wed, 09 Sep 2009 15:30:00 +0000</pubDate><atom:updated>2009-10-02T21:49:05.500+09:00</atom:updated><title>The HttpUtility.HtmlEncode Answer</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/C78kwBt_s5VuXI0cH3_q24GaghE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/C78kwBt_s5VuXI0cH3_q24GaghE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/C78kwBt_s5VuXI0cH3_q24GaghE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/C78kwBt_s5VuXI0cH3_q24GaghE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Is it just me.... but surely if you want to HtmlEncode something then you want to Encode all of it and not just the symbols? rant rant Anyway I found a nice little piece of code which will do ALL of the encoding over at the EggHead cafe thanks again Peter Bromberg for saving me an hour or three!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eggheadcafe.com/tutorials/aspnet/ca7f59b0-e086-4974-9130-3210625e675c/html-entities-class.aspx" rel="nofollow"&gt;http://www.eggheadcafe.com/tutorials/aspnet/ca7f59b0-e086-4974-9130-3210625e675c/html-entities-class.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-1002910801058612502?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=4zxFqpWIkkc:1Qsjlwy8NqE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=4zxFqpWIkkc:1Qsjlwy8NqE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=4zxFqpWIkkc:1Qsjlwy8NqE:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=4zxFqpWIkkc:1Qsjlwy8NqE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=4zxFqpWIkkc:1Qsjlwy8NqE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=4zxFqpWIkkc:1Qsjlwy8NqE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=4zxFqpWIkkc:1Qsjlwy8NqE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=4zxFqpWIkkc:1Qsjlwy8NqE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=4zxFqpWIkkc:1Qsjlwy8NqE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=4zxFqpWIkkc:1Qsjlwy8NqE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=4zxFqpWIkkc:1Qsjlwy8NqE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/4zxFqpWIkkc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/4zxFqpWIkkc/httputilityhtmlencode-answer.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://web2asp.net/2009/09/httputilityhtmlencode-answer.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-6977523464392741032</guid><pubDate>Mon, 07 Sep 2009 09:01:00 +0000</pubDate><atom:updated>2009-09-07T19:07:27.300+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Resharper</category><category domain="http://www.blogger.com/atom/ns#">Win ReSharper Licenses</category><category domain="http://www.blogger.com/atom/ns#">JetBrains</category><title>Win ReSharper Licenses Competition Update</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/edrUNJ7PzcVn-LCdnVaJjiKqLfo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/edrUNJ7PzcVn-LCdnVaJjiKqLfo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/edrUNJ7PzcVn-LCdnVaJjiKqLfo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/edrUNJ7PzcVn-LCdnVaJjiKqLfo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Thank you to all those who have already entered the Cool Code Snippets Code-Off, the response has been great and there have been some truly excellent entries since the competition started. &lt;/p&gt;  &lt;p&gt;For those of you who have not seen the details &lt;a href="http://web2asp.net/2009/08/win-resharper-personal-licenses-in-cool.html" target="_blank"&gt;check out the original post here for details&lt;/a&gt; of how to win your very own &lt;strong&gt;ReSharper Personal Licenses&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;As I mentioned before, I am going to post some of the best entries so far on the blog. So here goes for the first one (this doesn’t not mean this is a winner, but it does not rule it out either!)&amp;#160; so thank you Denny Ferrassoli for some very cool MVC code! &lt;/p&gt;  &lt;p&gt;Denny’s explanation: &lt;/p&gt;  &lt;p&gt;&lt;em&gt;“When working in &lt;/em&gt;&lt;a href="http://ASP.NET"&gt;&lt;em&gt;ASP.NET&lt;/em&gt;&lt;/a&gt;&lt;em&gt; MVC you sometimes pass a model to your view. In some cases your model is a few levels deep. For example:&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Model.User.Address.ZipCode&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Well I use models like this all the time and I constantly had to deal with properties being null when I was expecting a value. Since everything in a view gets rendered as string I decided to make a helper method that will allow me to pass anything in and return an empty string if the value was null (null dereferencing) instead of a NullReference Exception. Out came SafeGet. SafeGet is an extension method that applies to any object. It allows you to pass in the property, or value, you want to check as well as any constraints on the value.      &lt;br /&gt;Example:       &lt;br /&gt;&amp;lt;%= Html.TextBox( &amp;quot;BirthDate&amp;quot;, Model.User.SafeGet( o =&amp;gt; o.BirthDate, () =&amp;gt; DateTime.MinValue ) )%&amp;gt;       &lt;br /&gt;In the example above if&amp;#160; Model.User.BirthDate equals null OR DateTime.MinValue the function will return an empty string.”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;and the code:&lt;/p&gt;  &lt;pre name="code" class="c-sharp"&gt;public static string SafeGet&amp;lt;T&amp;gt;(this T instance, Func&amp;lt;T, object&amp;gt; nonNullFunction, params Func&amp;lt;object&amp;gt;[] nullConstraint) where T : class&lt;br /&gt;{&lt;br /&gt; if(instance != null &amp;&amp; nonNullFunction != null)&lt;br /&gt; {&lt;br /&gt;  try&lt;br /&gt;  {&lt;br /&gt;   var o = nonNullFunction(instance);&lt;br /&gt;&lt;br /&gt;   if(o == null) return string.Empty;&lt;br /&gt;&lt;br /&gt;   if(nullConstraint != null)&lt;br /&gt;   {&lt;br /&gt;    // Check each constraint to make sure it doesn't match&lt;br /&gt;    foreach(var constraint in nullConstraint)&lt;br /&gt;    {&lt;br /&gt;     if(constraint().Equals(o)) return string.Empty;&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   return o.ToString();&lt;br /&gt;  }&lt;br /&gt;  catch(NullReferenceException)&lt;br /&gt;  {&lt;br /&gt;   return string.Empty;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  // in all other cases, return the default&lt;br /&gt;  return string.Empty;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;The competition will run for another month and remember the more entries there are the more licenses JetBrains have agreed to provide (1 for every hundred entries 1/100 chance of winning!)&lt;/p&gt;  &lt;p&gt;If you would like to get an extended (6 week) trial for ReSharper and a 10% discount coupon please email me at &lt;a href='mailto:&amp;#119;&amp;#101;&amp;#98;&amp;#50;&amp;#97;&amp;#115;&amp;#112;&amp;#64;&amp;#103;&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#46;&amp;#99;&amp;#111;&amp;#109;'&gt;&amp;#119;&amp;#101;&amp;#98;&amp;#50;&amp;#97;&amp;#115;&amp;#112;&amp;#64;&amp;#103;&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#46;&amp;#99;&amp;#111;&amp;#109;&lt;/a&gt; and I will send over a trial license key with the coupon details.&lt;/p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweb2asp.net%2f2009%2f09%2fwin-resharper-licenses-competition.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweb2asp.net%2f2009%2f09%2fwin-resharper-licenses-competition.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;a rev="vote-for" href="http://dotnetshoutout.com/Win-ReSharper-Licenses-Competition-Update"&gt;&lt;img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fweb2asp.net%2F2009%2F09%2Fwin-resharper-licenses-competition.html" style="border:0px"/&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-6977523464392741032?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=fBQ_XtK0KAQ:x1IN-wOQ2eU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=fBQ_XtK0KAQ:x1IN-wOQ2eU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=fBQ_XtK0KAQ:x1IN-wOQ2eU:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=fBQ_XtK0KAQ:x1IN-wOQ2eU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=fBQ_XtK0KAQ:x1IN-wOQ2eU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=fBQ_XtK0KAQ:x1IN-wOQ2eU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=fBQ_XtK0KAQ:x1IN-wOQ2eU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=fBQ_XtK0KAQ:x1IN-wOQ2eU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=fBQ_XtK0KAQ:x1IN-wOQ2eU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=fBQ_XtK0KAQ:x1IN-wOQ2eU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=fBQ_XtK0KAQ:x1IN-wOQ2eU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/fBQ_XtK0KAQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/fBQ_XtK0KAQ/win-resharper-licenses-competition.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://web2asp.net/2009/09/win-resharper-licenses-competition.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-4178264644163813035</guid><pubDate>Wed, 19 Aug 2009 03:27:00 +0000</pubDate><atom:updated>2009-10-02T21:39:07.171+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Win Personal Licenses</category><category domain="http://www.blogger.com/atom/ns#">Resharper</category><category domain="http://www.blogger.com/atom/ns#">Cool Snippets Code-off</category><category domain="http://www.blogger.com/atom/ns#">JetBrains</category><category domain="http://www.blogger.com/atom/ns#">Competition</category><title>Win ReSharper Personal Licenses in the Cool Snippets Code-Off competition!</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ytZZG7aTGxe_wsN1dk8pQAYS6GM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ytZZG7aTGxe_wsN1dk8pQAYS6GM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ytZZG7aTGxe_wsN1dk8pQAYS6GM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ytZZG7aTGxe_wsN1dk8pQAYS6GM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Thanks to the success of the extended &lt;a href="http://www.jetbrains.com/resharper/index" target="_blank" rel="nofollow"&gt;ReSharper&lt;/a&gt; trial licenses and discount coupons, I am delighted to announce that I will be running a competition called COOL SNIPPETS code-off! &lt;b&gt;The prizes will be &lt;a href="http://www.jetbrains.com/resharper/index" target="_blank"&gt;ReSharper&lt;/a&gt; Personal Licenses!!!!!&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;The idea is simple:&lt;/p&gt;  &lt;p&gt;1. Email me the coolest, leanest, head slappingly elegant code snippet that your genius can divine (&lt;a href='mailto:&amp;#119;&amp;#101;&amp;#98;&amp;#50;&amp;#97;&amp;#115;&amp;#112;&amp;#64;&amp;#103;&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#46;&amp;#99;&amp;#111;&amp;#109;'&gt;&amp;#119;&amp;#101;&amp;#98;&amp;#50;&amp;#97;&amp;#115;&amp;#112;&amp;#64;&amp;#103;&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#46;&amp;#99;&amp;#111;&amp;#109;&lt;/a&gt;) and tell me what it does and why it’s cool. Please put “Cool Code Snippets” in the subject line of your email.&lt;/p&gt;  &lt;p&gt;2. Indicate if you would prefer your name to remain anonymous (I will be posting some of the coolest snippets periodically on my blog during the competition. If you elect to be anonymous I will just use some arbitrary initials as the author).&lt;/p&gt;  &lt;p&gt;3. There will be more competitions for developer gear coming up, so if you would like to get prior notice, indicate this in your email too. (Your email will be solely used for this purpose, I do not spam or share mailing lists that is a promise). &lt;/p&gt;  &lt;p&gt;4. Wait 2 months as this is how long the competition will run! (Competition runs from today 19th August 2009 – 19th October 2009 you will be contacted soon after the 19th October).&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Instructions for you email&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Put “Cool Code Snippets” in the subject line&lt;/p&gt;  &lt;p&gt;Email body should look something like this:&lt;/p&gt;  &lt;p&gt;Name: Carl Coder    &lt;br /&gt;I want to be anonymous: yes/no     &lt;br /&gt;Mail me about future competitions: yes/no     &lt;br /&gt;Code snippet:&lt;/p&gt;  &lt;p&gt;//obviously you can do much better than this    &lt;br /&gt;var x = new VeryCoolClass();     &lt;br /&gt;Explanation &amp;amp; Why it’s cool:     &lt;br /&gt;blah blah blah&lt;/p&gt;  &lt;p&gt;&lt;b&gt;You will automatically be entered into the competition for your very own &lt;a href="http://www.jetbrains.com/resharper/index" target="_blank" rel="nofollow"&gt;ReSharper&lt;/a&gt; Personal License&lt;/b&gt; courtesy of the wonderfully generous geniuses over at &lt;a href="http://www.jetbrains.com/resharper/index" target="_blank"&gt;JetBrains&lt;/a&gt; upon receipt of your code snippet. For the statisticians amongst you, &lt;a href="http://www.jetbrains.com/resharper/index" target="_blank" rel="nofollow"&gt;JetBrains&lt;/a&gt; will award a license for every 100 entries (for the non-statisticians this means that you are far more likely to win than get hit by a flying pig!). Let me spell it out, &lt;b&gt;the more of you that enter, the more chances you have of winning&lt;/b&gt;!&lt;/p&gt;  &lt;p&gt;The rules are simple:&lt;/p&gt;  &lt;p&gt;1. One entry per person (no multiple entries of the same snippet from different email addresses etc.) &lt;/p&gt;  &lt;p&gt;2. The code must be yours, DO NOT use code “borrowed” from your company’s repository or anything that you don’t have the right to freely share.&lt;/p&gt;  &lt;p&gt;3. You will need to provide a real email address (so that I can contact you if you win doh!) and if you do win other details so that &lt;a href="http://www.jetbrains.com/resharper/index" target="_blank" rel="nofollow"&gt;JetBrains&lt;/a&gt; can issue the license to you.&lt;/p&gt;  &lt;p&gt;4. The licenses are bound by the standard user agreement with &lt;a href="http://www.jetbrains.com/resharper/index" target="_blank" rel="nofollow"&gt;JetBrains&lt;/a&gt; and are for personal use and shall not be shared or otherwise distributed.&lt;/p&gt;  &lt;p&gt;A panel of objective adjudicators (Dave’s Dev Team) will decide the winners. This decision will be final (no whining or throwing your toys out of the pram if you don’t win!).&lt;/p&gt;  &lt;p&gt;And that’s it as simple as that, so what are you waiting for? Get your coding caps on!&lt;/p&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweb2asp.net%2f2009%2f08%2fwin-resharper-personal-licenses-in-cool.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweb2asp.net%2f2009%2f08%2fwin-resharper-personal-licenses-in-cool.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;a rev="vote-for" href="http://dotnetshoutout.com/Web-20-ASPNET-Win-ReSharper-Personal-Licenses-in-the-Cool-Snippets-Code-Off-competition"&gt;&lt;img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fweb2asp.net%2F2009%2F08%2Fwin-resharper-personal-licenses-in-cool.html" style="border:0px"/&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-4178264644163813035?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=fkFYVl20t2o:rVgKCmBCpcE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=fkFYVl20t2o:rVgKCmBCpcE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=fkFYVl20t2o:rVgKCmBCpcE:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=fkFYVl20t2o:rVgKCmBCpcE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=fkFYVl20t2o:rVgKCmBCpcE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=fkFYVl20t2o:rVgKCmBCpcE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=fkFYVl20t2o:rVgKCmBCpcE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=fkFYVl20t2o:rVgKCmBCpcE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=fkFYVl20t2o:rVgKCmBCpcE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=fkFYVl20t2o:rVgKCmBCpcE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=fkFYVl20t2o:rVgKCmBCpcE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/fkFYVl20t2o" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/fkFYVl20t2o/win-resharper-personal-licenses-in-cool.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://web2asp.net/2009/08/win-resharper-personal-licenses-in-cool.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-4636576423800105567</guid><pubDate>Tue, 11 Aug 2009 12:38:00 +0000</pubDate><atom:updated>2009-08-11T21:46:18.543+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Vista Upgrade</category><category domain="http://www.blogger.com/atom/ns#">Classic Start Menu</category><category domain="http://www.blogger.com/atom/ns#">Windows 7</category><category domain="http://www.blogger.com/atom/ns#">Quicklaunch</category><category domain="http://www.blogger.com/atom/ns#">Windows 7 upgrade experience</category><title>Windows 7 Upgrade Experience</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cYUqhP23eiGz3225ciDUiRPX0So/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cYUqhP23eiGz3225ciDUiRPX0So/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cYUqhP23eiGz3225ciDUiRPX0So/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cYUqhP23eiGz3225ciDUiRPX0So/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Hold your breath, back up EVERYTHING, cross your fingers and hit install… 4 hours later and wow! Not a blip on the Windows 7 horizon this is IMPRESSIVE, so long vista!&lt;/p&gt;  &lt;p&gt;Sounds like a long time for an upgrade? But you have to bear in mind we are talking about a dev machine with 3 flavors of Visual Studio on it and all the other gunk from SSMS to Japanese mobile phone emulators or in Geek Speak some 80 gigs worth of software.&lt;/p&gt;  &lt;p&gt;I kid you not, aside from having to uninstall daemon tools (which was picked up as incompatible by the install process) that really was it. Actually, I went out to a meeting while 7 did its stuff and came back to a MUCH more responsive notebook.&lt;/p&gt;  &lt;p&gt;By much more responsive I mean that programs start and close noticeably faster, the notebook boots up and is useable noticeably faster.&lt;/p&gt;  &lt;p&gt;There are really only a couple of things that I don’t like, but 2 of them at least have a work around,&amp;#160; these are the absence of the quick launch toolbar, the removal of the classic startup menu and a lack of easy access to the file menu in Windows Media Player 12. The first can be got around by adding a custom toolbar to&amp;#160; the Taskbar and pointing it at your Quick Launch folder, the second can be hacked using the CSMenu software but I hear it is slow and that you cannot right click the icons so I have not bothered and the last is really more of a niggle in that at whatever point if I am watching a movie or listening to a tune etc etc I want to be able to right click the player anywhere and to be able to browse for a different file (some would say this is really picky but as it it is now, unless I am mistaken, you have to go to the library tab first and then right click. Just seems like an unnecessary hoop to me).&lt;/p&gt;  &lt;p&gt;Obviously my notebook is relatively new (A Dell XPS M1530) but I should imagine given the total lack of driver issues and program problems I have had so far that most machines already running Vista should be able to run Windows 7. Notably DELL have&amp;#160; said that my notebook wasn’t compatible with Windows 7, but that was actually for the Beta version. Also you have to upgrade to the same or better version i.e. you can upgrade from vista home basic to windows 7 ultimate or Vista Basic to 7 basic &lt;/p&gt;  &lt;p&gt;Seriously give it a go! I didn’t actually need to do the backup first but it is always a good idea regardless and to actually be able to do an in place upgrade like this to a noticeably better OS and have all your existing programs run fine is truly a breath of fresh air, I can’t applaud this point enough, some serious effort has gone into this and dare I say it even a non-techie could manage it!!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweb2asp.net%2f2009%2f08%2fwindows-7-upgrade-experience.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweb2asp.net%2f2009%2f08%2fwindows-7-upgrade-experience.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-4636576423800105567?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=CJbDwAxcFMU:BlXyTUIV-gI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=CJbDwAxcFMU:BlXyTUIV-gI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=CJbDwAxcFMU:BlXyTUIV-gI:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=CJbDwAxcFMU:BlXyTUIV-gI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=CJbDwAxcFMU:BlXyTUIV-gI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=CJbDwAxcFMU:BlXyTUIV-gI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=CJbDwAxcFMU:BlXyTUIV-gI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=CJbDwAxcFMU:BlXyTUIV-gI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=CJbDwAxcFMU:BlXyTUIV-gI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=CJbDwAxcFMU:BlXyTUIV-gI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=CJbDwAxcFMU:BlXyTUIV-gI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/CJbDwAxcFMU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/CJbDwAxcFMU/windows-7-upgrade-experience.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://web2asp.net/2009/08/windows-7-upgrade-experience.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-3959943600205913265</guid><pubDate>Sun, 02 Aug 2009 05:02:00 +0000</pubDate><atom:updated>2009-08-02T14:31:23.117+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.NET MOBILE CONTROLS MVC</category><title>Are ASP.NET Mobile Controls Dead?</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YRtqbrd0SrL0apZBC9Xjn5k0ZoE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YRtqbrd0SrL0apZBC9Xjn5k0ZoE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YRtqbrd0SrL0apZBC9Xjn5k0ZoE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YRtqbrd0SrL0apZBC9Xjn5k0ZoE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Is just me or does the ASP.NET mobile controls site look a tad moribund these days? Visual studio 2008 saw the removal of the mobile project templates removed from the standard installation and the lack of examples and real world applications really makes development a labor of love.&lt;br /&gt;&lt;br /&gt;Noticably in Japan where mobile net usage is astonishingly high, I have literally been laughed at when mentioning the possibility of building sites on the platform.&lt;br /&gt;&lt;br /&gt;But even so, I cannot help but think this is due to a lack of unerstanding of the technology. Also, in a market where developers can charge for the development of separate sites for each type of mobile markup, being able to generate a single site which dynamically renders the same content could decrease revenues. But this is a very simplistic view. As devices become more powerful, so do the mobile browsers with support for javascipt and standard xhtml becoming the norm. But there are still many millions of users with very basic phones.&lt;br /&gt;&lt;br /&gt;Enter MVC! recently Scott Hanselman published a tutorial using MVC to build a mobile version of the Nerd Dinner sample application for the IPhone and Blackberry. Also Microsoft Ireland have been  almost secretly updating the browser caps files to include the latest devices (Ireland being the European hub for all things mobile these days). I really think it would be a crying shame if the ASP.NET mobile controls were to dissolve into obscurity as they are essentially a great idea and although the upkeep could be costly I think it is a great reason for using asp.net as it provides a crossover for web developers to lever their existing knowledge and allow a diverse selection of devices access to essentially the same application.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-3959943600205913265?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=OM8X5cGLaPY:nEIN3RSiP-0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=OM8X5cGLaPY:nEIN3RSiP-0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=OM8X5cGLaPY:nEIN3RSiP-0:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=OM8X5cGLaPY:nEIN3RSiP-0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=OM8X5cGLaPY:nEIN3RSiP-0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=OM8X5cGLaPY:nEIN3RSiP-0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=OM8X5cGLaPY:nEIN3RSiP-0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=OM8X5cGLaPY:nEIN3RSiP-0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=OM8X5cGLaPY:nEIN3RSiP-0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=OM8X5cGLaPY:nEIN3RSiP-0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=OM8X5cGLaPY:nEIN3RSiP-0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/OM8X5cGLaPY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/OM8X5cGLaPY/are-aspnet-mobile-controls-dead.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://web2asp.net/2009/08/are-aspnet-mobile-controls-dead.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-8474447162385602151</guid><pubDate>Thu, 30 Jul 2009 04:15:00 +0000</pubDate><atom:updated>2009-07-30T13:28:31.952+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">windows mobile 6 google mobile</category><title>windows mobile 6 and google mobile</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UTep38O_BQrMPOwBuGIt-6S5RQs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UTep38O_BQrMPOwBuGIt-6S5RQs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UTep38O_BQrMPOwBuGIt-6S5RQs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UTep38O_BQrMPOwBuGIt-6S5RQs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;I have to say I have been really impressed by the google mobile smart phone/PDA  interface. So here I am in a café on a very sunny day here in Osaka blogging away! its as simple as downloading the mobile toolbar and logging in once. Only have to say its a shame that more stores don't have wifi access but Japan being what it is I doubt it will be long before there is total coverage here. Really check it out! I think mobile devices have come along way since the early days. That said, for the big fingered out there you may find the keyboards a little clumsy, but gadget or not this is at least fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-8474447162385602151?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=3SRiVSWXibo:8NEylGXgTmU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=3SRiVSWXibo:8NEylGXgTmU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=3SRiVSWXibo:8NEylGXgTmU:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=3SRiVSWXibo:8NEylGXgTmU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=3SRiVSWXibo:8NEylGXgTmU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=3SRiVSWXibo:8NEylGXgTmU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=3SRiVSWXibo:8NEylGXgTmU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=3SRiVSWXibo:8NEylGXgTmU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=3SRiVSWXibo:8NEylGXgTmU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=3SRiVSWXibo:8NEylGXgTmU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=3SRiVSWXibo:8NEylGXgTmU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/3SRiVSWXibo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/3SRiVSWXibo/windows-mobile-6-and-google-mobile.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://web2asp.net/2009/07/windows-mobile-6-and-google-mobile.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-1864704825978463903</guid><pubDate>Sat, 04 Jul 2009 08:48:00 +0000</pubDate><atom:updated>2009-07-04T20:09:58.380+09:00</atom:updated><title>Subsonic 3 Released</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tLpYG7gi168HTScWg-WXgNrXVZE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tLpYG7gi168HTScWg-WXgNrXVZE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tLpYG7gi168HTScWg-WXgNrXVZE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tLpYG7gi168HTScWg-WXgNrXVZE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Just read &lt;a href="http://blog.wekeroad.com/" target="_blank"&gt;Rob Conery’s Blog&lt;/a&gt; and saw that Subsonic 3 is now available for download. For those unfamiliar with Subsonic it really is the ONLY no BS ORM out there, in fact it is so easy to get up and running that it is easy to forget that you ever set it up in the first place. The whole Subsonic ethic is to remove the hoops that other ORM’s have you jump through and essentially to get you home earlier.&lt;/p&gt;  &lt;p&gt;Forget XML templates, cumbersome GUI twiddling etc etc it is really as simple as adding a reference, adding a build provider section to your config file and a database connection string. See here for a quick start screen cast (which has a rocking led zep black dog backing track.. hey hey mama said the way you move..):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://subsonicproject.com/docs/The_5_Minute_Demo" target="_blank"&gt;http://subsonicproject.com/docs/The_5_Minute_Demo&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Other cool stuff to get your geek on are the new LINQ support, Simple repository and T4 templates it is built on, roughly translated means the learning curve is tiny and you can go customize it to your hearts content. Also, for the ”I don’t want to get the push cos I recommended a dog brigade” remember that these days RobCon is heavily involved in the ASP.NET MVC project and with their emphasis on open source and community input it is highly unlikely that the project will be left to pasture, in fact if I were to gaze into my crystal ball, I would hazard a guess and say that Subsonic could be destined for placement in the VS2010 suite of tools as an alternative to LINQ to SQL.&lt;/p&gt;  &lt;p&gt;Seriously, give it a try. I was knocked out after watching a few demos and now a couple of projects down the line and having done my own ORM wars I can honestly say that it is the best. Don’t get me wrong NHibernate has been well cooked and probably has more features but for sheer ease of use and slap your head innovation you just can’t beat it.&lt;/p&gt;  &lt;p&gt;Rob Conery and Team… guys you rock!&amp;#160; &lt;/p&gt;&lt;br /&gt;&lt;div style='height:10px;vertical-align:center'&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweb2asp.net%2f2009%2f07%2fsubsonic-3-released.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweb2asp.net%2f2009%2f07%2fsubsonic-3-released.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;a rev="vote-for" href="http://dotnetshoutout.com/Subsonic-3-Released"&gt;&lt;img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fweb2asp.net%2F2009%2F07%2Fsubsonic-3-released.html" style="border:0px"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-1864704825978463903?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=TkC4qCVJ-ts:ZowxF7IQSPk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=TkC4qCVJ-ts:ZowxF7IQSPk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=TkC4qCVJ-ts:ZowxF7IQSPk:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=TkC4qCVJ-ts:ZowxF7IQSPk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=TkC4qCVJ-ts:ZowxF7IQSPk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=TkC4qCVJ-ts:ZowxF7IQSPk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=TkC4qCVJ-ts:ZowxF7IQSPk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=TkC4qCVJ-ts:ZowxF7IQSPk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=TkC4qCVJ-ts:ZowxF7IQSPk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=TkC4qCVJ-ts:ZowxF7IQSPk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=TkC4qCVJ-ts:ZowxF7IQSPk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/TkC4qCVJ-ts" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/TkC4qCVJ-ts/subsonic-3-released.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://web2asp.net/2009/07/subsonic-3-released.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-6261581358630168635</guid><pubDate>Thu, 11 Jun 2009 07:30:00 +0000</pubDate><atom:updated>2009-06-11T22:50:12.448+09:00</atom:updated><title>MVC Support in the ASP.NET control suite market</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZqqbMxJoeowyRn5CtY2N2RHe0nE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZqqbMxJoeowyRn5CtY2N2RHe0nE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZqqbMxJoeowyRn5CtY2N2RHe0nE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZqqbMxJoeowyRn5CtY2N2RHe0nE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;One of the problems with embracing MVC is that the toolsets we may have used in our standard ASP.NET web forms projects may now not work in a new MVC project.&lt;/p&gt;  &lt;p&gt;However, do not fear! some of the big guns in the control suite market already have MVC support, so you may not need to re-invest in new MVC versions of the same suites or have to start re-inventing the wheel building MVC controls yourself. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Telerik&lt;/strong&gt; (10/10 Fully supported)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_A5nDBL4BxPI/SjCycAHau-I/AAAAAAAAAJY/-Acvkf3oEiY/s1600-h/telerikLogo-web-174x69px%5B4%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="telerikLogo-web-174x69px" border="0" alt="telerikLogo-web-174x69px" align="right" src="http://lh6.ggpht.com/_A5nDBL4BxPI/SjCycurj68I/AAAAAAAAAJc/djDdZZOutwc/telerikLogo-web-174x69px_thumb%5B2%5D.jpg?imgmax=800" width="174" height="69" /&gt;&lt;/a&gt;Telerik’s RAD Controls for ASP.NET AJAX, for example, have fully supported MVC since their 2009 Q1 release and have even provided a sample application:    &lt;br /&gt;MVC forums, see the demo here:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://demos.telerik.com/mvc/forums" target="_blank"&gt;http://demos.telerik.com/mvc/forums&lt;/a&gt;    &lt;br /&gt;    &lt;br /&gt;with full source code available here: &lt;a href="http://demos.telerik.com/mvc/mvc-forum.zip" target="_blank"&gt;     &lt;br /&gt;      &lt;br /&gt;http://demos.telerik.com/mvc/mvc-forum.zip&lt;/a&gt;)    &lt;br /&gt;    &lt;br /&gt;I dug into this offering this week and found some interesting stuff. Firstly, they are using their own ORM (Telerik Open Access ORM), which incidentally is free to use provided you are connecting to a free database (MySQL or SQL Express for example). &lt;/p&gt;  &lt;p&gt;I have been playing with Open Access for a while, doing my own version of ORM wars, one of the things I find about ORM’s generally is a surprising lack of real world tutorials and while the Webcasts tend to focus on the basic functionality and the one click crowd&amp;#160; pleasers, they do not dig deeply enough into the big questions. One of the cool things about Telerik’s demo is that they have built their own membership provider which uses their ORM for data persistence. When choosing a product to put into production it is very important to see examples of the enterprise implementation of a product and simply having a shiny examples page and the ability to demo the suite for a month will not be enough for a decision maker to make the jump.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;DevExpress&lt;/strong&gt; (8/10 full support in future version, now providing sample code for existing version)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_A5nDBL4BxPI/SjCyczvyq5I/AAAAAAAAAJg/-yy2TWgKIZY/s1600-h/devexpress%5B4%5D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px 10px 10px; display: inline; border-top: 0px; border-right: 0px" title="devexpress" border="0" alt="devexpress" align="right" src="http://lh6.ggpht.com/_A5nDBL4BxPI/SjCyddaMJ1I/AAAAAAAAAJk/la2dGiSfk8Y/devexpress_thumb%5B2%5D.gif?imgmax=800" width="165" height="49" /&gt;&lt;/a&gt; DevExpress have committed to providing full support for MVC in their next version of the control suite however in the meantime they are proving examples and tutorials you can see the tutorial and download the sample code here:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://community.devexpress.com/blogs/aspnet/archive/2009/02/17/video-case-study-devexpress-in-asp-net-mvc-framework.aspx" target="_blank"&gt;http://community.devexpress.com/blogs/aspnet/archive/2009/02/17/video-case-study-devexpress-in-asp-net-mvc-framework.aspx&lt;/a&gt; . &lt;/p&gt;  &lt;p&gt;Although relatively new in control suite market DevExpress, have impressed me with their agile approach, providing new functionalities and new versions quickly. &lt;/p&gt;  &lt;p&gt;This tutorial focuses on the ability of the DevExpress controls to use call backs which essentially means that it should run faster. The sample code includes a full site using different controls to illustrate the methodology.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;ComponentArt&lt;/strong&gt; (6/10 some support)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_A5nDBL4BxPI/SjCydhUFdPI/AAAAAAAAAJo/fW3QNSvznJQ/s1600-h/componentart%5B8%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px 10px 10px; display: inline; border-top: 0px; border-right: 0px" title="componentart" border="0" alt="componentart" align="right" src="http://lh3.ggpht.com/_A5nDBL4BxPI/SjCyePgyvpI/AAAAAAAAAJs/UE1qAnQju0Y/componentart_thumb%5B6%5D.png?imgmax=800" width="240" height="66" /&gt;&lt;/a&gt; ComponentArt’s Web.UI supports MVC via it’s ComponentArt CallBack component in much the same way as DevExpress does in their examples. Again, they do not heavily advertise this in their marketing but they do offer examples on implementation.&lt;/p&gt;  &lt;p&gt;See Here for demo code and applications:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.componentart.com/blogs/milos/archive/2008/05/01/asp-net-mvc-and-ajax.aspx" href="http://www.componentart.com/blogs/milos/archive/2008/05/01/asp-net-mvc-and-ajax.aspx"&gt;http://www.componentart.com/blogs/milos/archive/2008/05/01/asp-net-mvc-and-ajax.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Infragistics&lt;/strong&gt; (0/10 no support)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_A5nDBL4BxPI/SjCyeX-j-zI/AAAAAAAAAJw/7R82tSRl9F0/s1600-h/Infragistics%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px 10px 10px; display: inline; border-top: 0px; border-right: 0px" title="Infragistics" border="0" alt="Infragistics" align="right" src="http://lh4.ggpht.com/_A5nDBL4BxPI/SjCye0xgFvI/AAAAAAAAAJ0/Wl9HuA2ETQo/Infragistics_thumb%5B2%5D.png?imgmax=800" width="196" height="53" /&gt;&lt;/a&gt; Infragistics have taken the stance that MVC is such an entirely different framework to work with that it will require a new suite of controls to really support it, although interestingly I cannot find any announcement or reference to any project which may may have been started.&lt;/p&gt;  &lt;p&gt;See here for explanations from the Infragistics forum:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://forums.infragistics.com/forums/p/1227/15920.aspx#15920" href="http://forums.infragistics.com/forums/p/1227/15920.aspx#15920"&gt;http://forums.infragistics.com/forums/p/1227/15920.aspx#15920&lt;/a&gt;    &lt;br /&gt;&lt;a title="http://blogs.infragistics.com/forums/p/16378/59635.aspx#59635" href="http://blogs.infragistics.com/forums/p/16378/59635.aspx#59635"&gt;http://blogs.infragistics.com/forums/p/16378/59635.aspx#59635&lt;/a&gt;&lt;/p&gt; &lt;br /&gt;&lt;div style='height:10px; vertical-align:center;'&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweb2asp.net%2f2009%2f06%2fmvc-support-in-aspnet-control-suite.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweb2asp.net%2f2009%2f06%2fmvc-support-in-aspnet-control-suite.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a rev="vote-for" href="http://dotnetshoutout.com/Web-20-ASPNET-MVC-Support-in-the-ASPNET-control-suite-market"&gt;&lt;img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fweb2asp.net%2F2009%2F06%2Fmvc-support-in-aspnet-control-suite.html" style="border:0px"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-6261581358630168635?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=-4VOIsWNvTE:PT6QbukAvQE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=-4VOIsWNvTE:PT6QbukAvQE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=-4VOIsWNvTE:PT6QbukAvQE:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=-4VOIsWNvTE:PT6QbukAvQE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=-4VOIsWNvTE:PT6QbukAvQE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=-4VOIsWNvTE:PT6QbukAvQE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=-4VOIsWNvTE:PT6QbukAvQE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=-4VOIsWNvTE:PT6QbukAvQE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=-4VOIsWNvTE:PT6QbukAvQE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=-4VOIsWNvTE:PT6QbukAvQE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=-4VOIsWNvTE:PT6QbukAvQE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/-4VOIsWNvTE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/-4VOIsWNvTE/mvc-support-in-aspnet-control-suite.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://web2asp.net/2009/06/mvc-support-in-aspnet-control-suite.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-4565966741352227422</guid><pubDate>Tue, 07 Apr 2009 15:48:00 +0000</pubDate><atom:updated>2009-06-09T22:25:26.533+09:00</atom:updated><title>ReSharper 4.5 Release Candidate Published</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-DF8_69JjVu68lEOOm3NQj-3nYU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-DF8_69JjVu68lEOOm3NQj-3nYU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-DF8_69JjVu68lEOOm3NQj-3nYU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-DF8_69JjVu68lEOOm3NQj-3nYU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I have been using the ReSharper&amp;#160; 4.5 Beta release for the last couple of weeks and found it to be reasonably stable and much faster than version 4. I just noticed that a release candidate has been posted on their nightly builds page:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+4.5+Nightly+Builds" href="http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+4.5+Nightly+Builds"&gt;http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+4.5+Nightly+Builds&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;For those of you unfamiliar with the tool, I still have a few discount coupons and extended trials available&amp;#160; so you can check out what all the hype is about for yourself:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://web2asp.net/2009/01/resharper-extended-trial-period-and.html" href="http://web2asp.net/2009/01/resharper-extended-trial-period-and.html"&gt;http://web2asp.net/2009/01/resharper-extended-trial-period-and.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Face it guys, if you can (hand on heart) write a couple of hundred lines of code on a Friday without a single bug *** cough *** feature then you would be either A) an AI or B) able to touch type machine code.&lt;/p&gt;  &lt;p&gt;ReSharper is all about taking the pain out of coding by making it harder to make mistakes and also helping you do that faster so you can spend more time on the important things. Granted, it won’t make you a latte or pay for your beers but it will certainly help to keep your typo factor down to bare minimum and probably keep your project manager/lead dev off your back to boot!&lt;/p&gt;&lt;br /&gt;&lt;div style='height:10px; vertical-align:center;'&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweb2asp.net%2f2009%2f04%2fresharper-45-release-candidate.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweb2asp.net%2f2009%2f04%2fresharper-45-release-candidate.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a rev="vote-for" href="http://dotnetshoutout.com/Web-20-ASPNET-ReSharper-45-Release-Candidate-Published"&gt;&lt;img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fweb2asp.net%2F2009%2F04%2Fresharper-45-release-candidate.html" style="border:0px"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-4565966741352227422?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=7rlGYA4ypbw:nlpSe2KZCaI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=7rlGYA4ypbw:nlpSe2KZCaI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=7rlGYA4ypbw:nlpSe2KZCaI:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=7rlGYA4ypbw:nlpSe2KZCaI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=7rlGYA4ypbw:nlpSe2KZCaI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=7rlGYA4ypbw:nlpSe2KZCaI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=7rlGYA4ypbw:nlpSe2KZCaI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=7rlGYA4ypbw:nlpSe2KZCaI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=7rlGYA4ypbw:nlpSe2KZCaI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/web2aspnetfeed?a=7rlGYA4ypbw:nlpSe2KZCaI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/web2aspnetfeed?i=7rlGYA4ypbw:nlpSe2KZCaI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/7rlGYA4ypbw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/7rlGYA4ypbw/resharper-45-release-candidate.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://web2asp.net/2009/04/resharper-45-release-candidate.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-6808002073182365803</guid><pubDate>Sat, 31 Jan 2009 14:09:00 +0000</pubDate><atom:updated>2009-02-01T03:26:27.662+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Development Tools</category><category domain="http://www.blogger.com/atom/ns#">Regex Workbench</category><category domain="http://www.blogger.com/atom/ns#">Regular Expressions</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">Add-ins</category><category domain="http://www.blogger.com/atom/ns#">Fiddler</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET C#</category><category domain="http://www.blogger.com/atom/ns#">RSS Toolkit</category><category domain="http://www.blogger.com/atom/ns#">UrlRewriting.net</category><category domain="http://www.blogger.com/atom/ns#">Telerik Rad Controls</category><category domain="http://www.blogger.com/atom/ns#">Internet Explorer Developer Toolbar</category><title>Top ASP.NET Developments Tools</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Tn1SZAmjUtYgMTxGKd70NOTIdY0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Tn1SZAmjUtYgMTxGKd70NOTIdY0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Tn1SZAmjUtYgMTxGKd70NOTIdY0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Tn1SZAmjUtYgMTxGKd70NOTIdY0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;ASP.NET Toolkit&lt;/strong&gt;&lt;strong&gt;     &lt;br /&gt;&lt;/strong&gt;I always get asked what my favourite development tools are, so in my last article I talked about my favourite Visual Studio add-ins. This time I want to talk about my favourite ASP.NET Development Tools.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;UrlRewriting.net&lt;/strong&gt; &lt;a href="http://www.urlrewriting.net/149/en/home.html" target="_blank"&gt;http://www.urlrewriting.net/149/en/home.html&lt;/a&gt;    &lt;br /&gt;This great little free dll enables you to rewrite dynamic URL’s to SEO friendly versions in your ASP.NET applications and was written by &lt;a href="http://der-albert.com/"&gt;Albert Weinert&lt;/a&gt; &amp;amp; &lt;a href="http://blog.thomasbandt.de/"&gt;Thomas Bandt&lt;/a&gt; back in 2006, essentially you use Regexes in your web.config file to set it up. This has saved my life on many occasions when developing applications which get hosted on shared web hosting. So a big thank you to Albert &amp;amp; Thomas (who used to personally answer support requests) great job boys!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Fiddler 2&lt;/strong&gt; &lt;a href="http://www.fiddlertool.com/fiddler/" target="_blank"&gt;http://www.fiddlertool.com/fiddler/&lt;/a&gt;    &lt;br /&gt;This is a Http debug proxy which can be accessed either from internet explorer or directly. If you want take a hard look at response and request information and even get statistics on the performance of your pages, this is IMHO the best tool for the job and it is free. At a more advanced level you can extend it’s functionality using rules (programmed in a any .NET language) and you can set up custom requests to test the response from your applications. I use it sometimes on my ASP.NET mobile web form apps to send mobile user-agents with requests to see what is returned.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Telerik Rad Controls&lt;/strong&gt; &lt;a href="http://www.telerik.com/" target="_blank"&gt;http://www.telerik.com/&lt;/a&gt;    &lt;br /&gt;This is a paid for set of controls which really sets the bar in the control suite market. It is not cheap, but if you are intending to build multiple applications then the return on investment is huge. The RadEditor, for example, literally does ninety percent of the work for you in terms of building a seriously functioned CMS. If you want to get a handle on what the controls can do check out the &lt;a href="http://www.telerik.com/" target="_blank"&gt;Telerik Site&lt;/a&gt;. I really love the AJAX scheduler control, I recently manage to hook it up to a Google calendar feed!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Internet Explorer Developer Toolbar &lt;/strong&gt;&lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;amp;DisplayLang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;amp;DisplayLang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;amp;DisplayLang=en&lt;/a&gt;    &lt;br /&gt;This tool is an Internet Explorer Add-in, much like firebug for Firefox ,which lets you mess around with the document model, locate html items in a page and bunch of other useful gadgets. My personal favourite is that You can set up custom window sizes so that you can preview your sites at various resolutions. I also use it to tweak CSS in my designs without committing the changes to the CSS file.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Regex Workbench &lt;/strong&gt;&lt;a href="http://code.msdn.microsoft.com/RegexWorkbench/Release/ProjectReleases.aspx?ReleaseId=406" target="_blank"&gt;http://code.msdn.microsoft.com/RegexWorkbench/Release/ProjectReleases.aspx?ReleaseId=406&lt;/a&gt;    &lt;br /&gt;The Regex Workbench is a cool (free) sandbox for writing regular expressions. For the rusty amongst you, it also includes a library of insertable regex codes for captures, forward lookups and character identifiers. You can run your Regexes on any text or html that you can think of by dropping it into the textbox and apply different Regex parameters (single line, multi line etc) to see the results. Once you have honed your creation, there is a simple export function which generates the proper code for C# and VB.NET, so you don’t need to worry about escaping your Regex correctly, just paste it into your app code. Thank you Eric Gu, nice job feller!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;RSS Toolkit&lt;/strong&gt; &lt;a title="http://www.codeplex.com/ASPNETRSSToolkit" href="http://www.codeplex.com/ASPNETRSSToolkit"&gt;http://www.codeplex.com/ASPNETRSSToolkit&lt;/a&gt;    &lt;br /&gt;I recently blogged about these tools in detail here: &lt;a href="http://web2asp.net/2009/01/using-aspnet-rss-toolkit-to-quickly.html" target="_blank"&gt;http://web2asp.net/2009/01/using-aspnet-rss-toolkit-to-quickly.html&lt;/a&gt;    &lt;br /&gt;If you are looking to either syndicate or consume RSS content, don’t reinvent the wheel! It does the job and it’s free, nuff said!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Conclusion     &lt;br /&gt;&lt;/strong&gt;Hope you find these useful, there are of course many other dev tools around, these are just a few of my personal favourites. In another post I will talk about some of the tools I use for developing Mobile ASP.NET sites.&lt;/p&gt;&lt;div style='height:10px; vertical-align:center;'&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweb2asp.net%2f2009%2f01%2ftop-aspnet-developments-tools.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweb2asp.net%2f2009%2f01%2ftop-aspnet-developments-tools.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a rev="vote-for" href="http://dotnetshoutout.com/Top-ASPNET-Development-Tools"&gt;&lt;img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fweb2asp.net%2F2009%2F01%2Ftop-aspnet-developments-tools.html" style="border:0px"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-6808002073182365803?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=Duh8bmIb"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=jnx8PWwR"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=WiQGs6Ir"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=O60l3T5f"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=O60l3T5f" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=yn4dLLHw"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=ec6aVGd2"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=ec6aVGd2" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=U7UcZO6o"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=5YeYa6cK"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=5YeYa6cK" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/RjTW42qr2ao" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/RjTW42qr2ao/top-aspnet-developments-tools.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://web2asp.net/2009/01/top-aspnet-developments-tools.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-7875577718542768727</guid><pubDate>Fri, 30 Jan 2009 15:57:00 +0000</pubDate><atom:updated>2010-02-13T16:34:58.787+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Resharper Discount Coupon</category><category domain="http://www.blogger.com/atom/ns#">Resharper Discount</category><category domain="http://www.blogger.com/atom/ns#">ReSharper Extended Trial Period</category><category domain="http://www.blogger.com/atom/ns#">Resharper</category><category domain="http://www.blogger.com/atom/ns#">Jetbrains ReSharper</category><title>Resharper 10% Discount Coupon and 60 day Extended Trial Period</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MzbNsXBAOPvp67uxseSHyGIPEqM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MzbNsXBAOPvp67uxseSHyGIPEqM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MzbNsXBAOPvp67uxseSHyGIPEqM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MzbNsXBAOPvp67uxseSHyGIPEqM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;After my previous post about &lt;a href="http://web2asp.net/2009/01/top-visual-studio-add-ins.html" rel="nofollow"&gt;top visual studio add-ins&lt;/a&gt; I got an email from the guys over at Jetbrains, apparently their standard trial period for Resharper is 30 days. If you would like an extended &lt;strong&gt;60 day &lt;/strong&gt;trial and a &lt;strong&gt;10% rebate/discount&lt;/strong&gt; coupon on any of the ReSharper Licenses including Commercial, email me at &lt;a href='mailto:&amp;#119;&amp;#101;&amp;#98;&amp;#50;&amp;#97;&amp;#115;&amp;#112;&amp;#64;&amp;#103;&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#46;&amp;#99;&amp;#111;&amp;#109;'&gt;&amp;#119;&amp;#101;&amp;#98;&amp;#50;&amp;#97;&amp;#115;&amp;#112;&amp;#64;&amp;#103;&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#46;&amp;#99;&amp;#111;&amp;#109;&lt;/a&gt; and I will send over a trial license key with the coupon details.&lt;br /&gt;
[Edit 1st Feb 2010] Please note the ReSharper Discount / Rebate &amp; extended trial is still available and I just heard from Jetbrains that, for a limited time, if you buy ReSharper now you get version 5 for free when it is released[/Edit]&lt;br /&gt;
&lt;br /&gt;
I respect privacy so your email address will not be re-used or saved for any other purpose.&lt;/p&gt;&lt;div style='height:10px; vertical-align:center'&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweb2asp.net%2f2009%2f01%2fresharper-extended-trial-period-and.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweb2asp.net%2f2009%2f01%2fresharper-extended-trial-period-and.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;a rev="vote-for" href="http://dotnetshoutout.com/Resharper-Extended-Trial-Period-and-discount-coupons"&gt;&lt;img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fweb2asp.net%2F2009%2F01%2Fresharper-extended-trial-period-and.html" style="border:0px"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-7875577718542768727?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=v0mlKl8e"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=frBDJnfl"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=cPKf0aBJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=DAhXPjRR"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=DAhXPjRR" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=LQHOPsds"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=ifbP1Ggy"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=ifbP1Ggy" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=g80eSjrm"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=gbuz7gpb"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=gbuz7gpb" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/UrB5HYJU8eY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/UrB5HYJU8eY/resharper-extended-trial-period-and.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">88</thr:total><feedburner:origLink>http://web2asp.net/2009/01/resharper-extended-trial-period-and.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-7295637138088803936</guid><pubDate>Tue, 27 Jan 2009 15:31:00 +0000</pubDate><atom:updated>2010-02-21T16:36:32.858+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Ghost Doc</category><category domain="http://www.blogger.com/atom/ns#">Power Commands</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio 2008</category><category domain="http://www.blogger.com/atom/ns#">Resharper</category><category domain="http://www.blogger.com/atom/ns#">Add-ins</category><category domain="http://www.blogger.com/atom/ns#">Smart Paster</category><title>Top Visual Studio Add-ins</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/00P8_3ETTAs_WAKZ_nKAg4gB6ZU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/00P8_3ETTAs_WAKZ_nKAg4gB6ZU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/00P8_3ETTAs_WAKZ_nKAg4gB6ZU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/00P8_3ETTAs_WAKZ_nKAg4gB6ZU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://click.linksynergy.com/fs-bin/click?id=1gAmHUZbLJo&amp;offerid=166833.10000426&amp;subid=0&amp;type=4"&gt;&lt;IMG border="0"   alt="Microsoft Store" src="http://ad.linksynergy.com/fs-bin/show?id=1gAmHUZbLJo&amp;bids=166833.10000426&amp;subid=0&amp;type=4&amp;gridnum=0"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p&gt;&lt;strong&gt;Development Toolkit&lt;/strong&gt;    &lt;br /&gt;
I am often asked what my favourite development tools are, so I thought I’d write down a few that I use and why. I have split this list in 2 as some of these are add-ons for visual studio and others are just standalone applications here are the VS Add-ins.    &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Top Visual Studio Add-ins&lt;/strong&gt;    &lt;br /&gt;
&lt;br /&gt;
1. &lt;strong&gt;Jetbrains Resharper&lt;/strong&gt; &lt;a href="http://www.jetbrains.com/resharper/index.html" rel="nofollow"&gt;http://www.jetbrains.com/resharper/index.html&lt;/a&gt;    &lt;br /&gt;
This add-on does not work with Visual Studio Express editions so if you don’t have VS standard or above, then move to the next one. If you do however, this really is one of the best productivity enhancing tools out there. At its simplest the intellisense enhancements alone are worth the money and in my book are far superior to the out of the box VS version. Add to that the visual highlighting of problematic code, recommendations for best practices coding and cross solution code cleanup and you have a formidable tool for ensuring the quality of your code and speeding up the development process. You can also take it to the next level and create your own surround with templates and keyboard shortcuts. Resharper also rocks when you want to to run NUnit tests, it ads a bunch of context commands for Unit testing and runs a modal window so that you can visually se the tests running (and hopefully passing!) in fact I would be lost without it&amp;#160; [Edit 02nd Feb 2010]Since writing this post I have been contacted by Jetbrains who have offered an extended trial period and discount coupon for Resharper see &lt;a href="http://web2asp.net/2009/10/resharper-discount-and-free-upgrade-to.html" rel="nofollow"&gt;here for details&lt;/a&gt;.    &lt;br /&gt;
&lt;br /&gt;
2. &lt;strong&gt;Ghost doc &lt;/strong&gt;&lt;a title="Gostdoc" href="http://submain.com/products/ghostdoc.aspx" rel="nofollow"&gt;http://submain.com/products/ghostdoc.aspx&lt;/a&gt;    &lt;br /&gt;
This add-in takes the pain out of generating documentation by allowing you to quickly add comments to your methods and properties. It is customizable so you can set up the way you want the comments to appear and there are versions for VS2003,2005 and 2008. It is free as well so big ups to Roland Weigelt for this great tool.    &lt;br /&gt;
&lt;br /&gt;
3. &lt;strong&gt;Power Commands for VS2008&lt;/strong&gt; &lt;a href="http://code.msdn.microsoft.com/PowerCommands"&gt;http://code.msdn.microsoft.com/PowerCommands&lt;/a&gt;    &lt;br /&gt;
With functions like 'format and order using on save' and 'format document on save' this free add-in is an easy choice and easy win. My personal favourites are ‘email code snippet’ which means you can highlight a section of code, right click and have an outlook mail window open with the code already in it and the 'collapse all projects' command which collapses all the projects in your solution pane. This add-in is also free.    &lt;br /&gt;
&lt;br /&gt;
4. &lt;strong&gt;Visual NDepend &lt;/strong&gt;&lt;a title="http://www.ndepend.com/" href="http://www.ndepend.com/"&gt;&lt;strong&gt;http://www.ndepend.com/&lt;/strong&gt;&lt;/a&gt;    &lt;br /&gt;
You ever have that feeling where you're not sure if you're awake or still dreaming? If you will excuse the matrix reference, this excellent tool developed by Patrick Smacchia Microsoft MVP, answers many questions that I find myself asking or being asked at dev meetings. How good is my code? NDepend visually shows you exactly where your weak links are and for Lead Developers and CTO’s offers metrics and a ultra cool querying interface. NDepend is also invaluable if you want to plan a major refactoring or to assert design rules. At it’s most basic you get a pat on the back and the feeling that you have written some decent code, but the more you dig into it and see how deep the rabbit hole goes (apologies for another blatant Morpheus quote!) the more valuable it becomes. This is a big picture tool specifically designed to make the big picture easy to understand.&lt;/p&gt;&lt;p&gt;5.&lt;strong&gt;VisualSVN &lt;a title="http://www.visualsvn.com/" href="http://www.visualsvn.com/"&gt;http://www.visualsvn.com/&lt;/a&gt;      &lt;br /&gt;
&lt;/strong&gt;Source control that works! anybody who’s anybody already knows that Visual Source Safe was a dog and if they are not already using Subversion as their source control&amp;#160; they darn well better start soon! VisualSVN is the Visual Studio add-in for VisualSVNServer which enables seamless integration with your Subversion Repositories. Don’t be crying anymore when your Source Safe database dies or you are constantly having to repair it. Stop pulling your hair out and do it right!    &lt;br /&gt;
&lt;br /&gt;
Next time I will list the other standalone dev tools I use regularly.    &lt;br /&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweb2asp.net%2f2009%2f01%2ftop-visual-studio-add-ins.html"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweb2asp.net%2f2009%2f01%2ftop-visual-studio-add-ins.html" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-7295637138088803936?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=IwIQ0OJ9"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=SWyXuq92"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=rfy6SCBx"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=09Oqtn0q"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=09Oqtn0q" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=Nvb43rfR"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=lFwBFzrU"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=lFwBFzrU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=JO9gX7cS"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=FGpYvGnq"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=FGpYvGnq" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/fbpY6VRWHws" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/fbpY6VRWHws/top-visual-studio-add-ins.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://web2asp.net/2009/01/top-visual-studio-add-ins.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-2773940189274275437</guid><pubDate>Mon, 26 Jan 2009 14:01:00 +0000</pubDate><atom:updated>2009-01-26T23:11:05.182+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MVC</category><category domain="http://www.blogger.com/atom/ns#">JQuery</category><category domain="http://www.blogger.com/atom/ns#">SEO friendly URL</category><category domain="http://www.blogger.com/atom/ns#">HTML</category><category domain="http://www.blogger.com/atom/ns#">Model View Controller</category><title>Why MVC?</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uNIlPeWkHGX4DpWtgM8TcbdMIuI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uNIlPeWkHGX4DpWtgM8TcbdMIuI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uNIlPeWkHGX4DpWtgM8TcbdMIuI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uNIlPeWkHGX4DpWtgM8TcbdMIuI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;strong&gt;Why MVC?&lt;/strong&gt;&lt;br /&gt;Yet another MVC introduction? Not exactly… I bet you are all sick and tired of hearing the acronym MVC these days and if you are here to grab a 4 dummies guide to set you on your merry way then Response.Redirect immediately as this is more about the ‘why’ than the code. &lt;br /&gt;&lt;br /&gt;Like all big Microsoft innovations there have been much fanfares, Alphas and more recently a Beta with a go live license to wet appetites and fuel the blogsphere with new content, but what is it about MVC which is making headlines and more importantly, why would you (the developer) want to give this a shot?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Control Freaks&lt;/strong&gt;&lt;br /&gt;I am sick and tired of hearing people complain about the bloated html and unnecessary code which ASP.NET emits to the browser by default, but let’s be frank (or Dave or whoever you want to be) most of these people have been developing apps the drag and drop (MS Tutorial cool aid method) way without really understanding what is going on under the ASP.NET skirt. So again if you happy GUI’ing your way to the programming hall of fame (and I am not at all saying that is impossible) then you can also Response.Redirect.&lt;br /&gt;&lt;br /&gt;MVC is pretty much aimed at developers who do understand the rudimentary function of POST and GET and who really want ultimate control over what HTML is rendered to the browser. This ability is already in ASP.NET but MVC takes this a step further entirely removing page bloat like viewstate and the ever lengthening control id’s rendered by ASP.NET currently. It also supports serious unit testing which has, up to now, been very difficult to accomplish in ASP.NET applications. Other real world bonuses include having control over the url’s which render content, which should appeal to the SEO literate amongst you. JQuery is also built in so you have no excuse for not tinkering with (IMHO) the best JavaScript library out there. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update an existing application?&lt;/strong&gt;&lt;br /&gt;Good luck to you! MVC does not support the current arsenal of ASP.NET web controls so any Lead Dev who has yet to read the brochure, will need to think very seriously before committing to MVC. Most of the introductions I have seen state this is probably more suited to green field projects, but I wouldn’t rule it out completely. The bandwidth money saved, enhanced SEO and potentially huge performance improvements could far outweigh the cost of development, not to mention the benefits of a properly unit tested code and transparency of function gained by using the Model View Controller model.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Man Up!&lt;/strong&gt;&lt;br /&gt;So if you are sick and tired of being branded a code pussy by the greasy Ruby and PHP cowboys and you want to take control and responsibility for what your app dishes out to the client then get your stirrups on, mount that pony and get on the MVC trail….&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweb2asp.net%2f2009%2f01%2fwhy-mvc.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweb2asp.net%2f2009%2f01%2fwhy-mvc.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-2773940189274275437?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=ZVBUNook"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=N2ZNIkra"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=8xAJSNpW"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=L3ogAa1p"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=L3ogAa1p" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=IM8didNt"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=O95Z5ZHv"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=O95Z5ZHv" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=QY5V7AEF"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=rAXbMIJT"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=rAXbMIJT" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/vZIYcEPT-Zs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/vZIYcEPT-Zs/why-mvc.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://web2asp.net/2009/01/why-mvc.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-3402446042614018991</guid><pubDate>Thu, 22 Jan 2009 16:49:00 +0000</pubDate><atom:updated>2009-01-26T18:27:35.610+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Compression</category><category domain="http://www.blogger.com/atom/ns#">Bandwidth</category><category domain="http://www.blogger.com/atom/ns#">Deflate</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">Http Compression</category><category domain="http://www.blogger.com/atom/ns#">Performance</category><category domain="http://www.blogger.com/atom/ns#">GZip</category><title>Using GZip or Deflate in ASP.NET to improve application performance and conserve bandwith</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/O27FnpQEmYi0xXf5sraslG3FlpI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O27FnpQEmYi0xXf5sraslG3FlpI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/O27FnpQEmYi0xXf5sraslG3FlpI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O27FnpQEmYi0xXf5sraslG3FlpI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br /&gt;One of the big complaints about ASP.NET, by proponents of clean semantic mark up, is that the raw html emitted by the ASP.NET engine can be bloated and can, as a result, degrade performance. Of course we could go through all our applications and recode our controls to output cleaner mark up, obviously this takes a lot of time and likely not the choice made by most lead developers when choosing new projects to work on. This article describes a quick method to decrease the size of code sent to browsers and speed up the loading process for users.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;GZip/Deflate&lt;/strong&gt;&lt;br /&gt;GZip and Deflate are compressions used to send data over Http, the majority of browsers now support the decompression of these formats and so they are the best choice for us to use. Developers with direct access to the administration of IIS could of course enable Http Compression (see &lt;a href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/25d2170b-09c0-45fd-8da4-898cf9a7d568.mspx?mfr=true"&gt;Here for instructions for setting up IIS&lt;/a&gt;). But, if you are using shared hosting or this kind of administration is not feasible, we can use the System.IO.Compression assembly to perform the compression at the application level.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;br /&gt;Basically, we add a bit of code to our page load which compresses the output stream of the Response. I tend to put this code in my custom page class in the app_code folder so that it runs automatically for each page, but that may not be suitable for your situation so I will leave this choice up to you. &lt;br /&gt;&lt;br /&gt;Obviously, we can’t ignore the fact that some browsers don’t like compressed content, so the first thing we do is to check the Request Headers for the accept encoding header for GZip (most of the major browsers accept both, I have favoured GZip in this snippet as it seems the more popular of the two, but again the choice is yours). Once the allowed compression type is determined the code modifies the Response Filter with the appropriate Stream Compression. &lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;   if (Request.Headers["Accept-encoding"] != null &amp;&amp; Request.Headers["Accept-encoding"].Contains("gzip"))&lt;br /&gt;   {&lt;br /&gt;    Response.Filter = new GZipStream(Response.Filter, CompressionMode.Compress, true);&lt;br /&gt;    Response.AppendHeader("Content-encoding", "gzip");&lt;br /&gt;   }&lt;br /&gt;   else if (Request.Headers["Accept-encoding"] != null &amp;&amp; Request.Headers["Accept-encoding"].Contains("deflate"))&lt;br /&gt;   {&lt;br /&gt;    Response.Filter = new DeflateStream(Response.Filter, CompressionMode.Compress, true);&lt;br /&gt;    Response.AppendHeader("Content-encoding", "deflate");&lt;br /&gt;   }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And thats it! When applied, I saw a noticeable speed up in the page load and on closer inspection in fiddler the size of the documents downloaded had decreased from 16-17Kb to 6Kb in many cases. This is a significant improvement if bandwidth is an issue for you and you can really see how this could make a huge difference to your bandwidth costs and to the performance of your applications.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweb2asp.net%2f2009%2f01%2fintroduction-one-of-big-complaints.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweb2asp.net%2f2009%2f01%2fintroduction-one-of-big-complaints.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-3402446042614018991?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=eQfTyKVX"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=xk0we8FB"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=gMm6jGPB"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/lGhkfBxJyZY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/lGhkfBxJyZY/introduction-one-of-big-complaints.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://web2asp.net/2009/01/introduction-one-of-big-complaints.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-5702719134114559361</guid><pubDate>Mon, 19 Jan 2009 16:20:00 +0000</pubDate><atom:updated>2009-01-26T18:30:09.128+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">JQuery</category><category domain="http://www.blogger.com/atom/ns#">Scriptaculous</category><category domain="http://www.blogger.com/atom/ns#">Google AJAX Libraries API</category><category domain="http://www.blogger.com/atom/ns#">Google</category><category domain="http://www.blogger.com/atom/ns#">Yahoo User Interface Library</category><category domain="http://www.blogger.com/atom/ns#">Prototype</category><title>Google Hosts JQuery, Scriptaculous, Prototype and Even the Yahoo User Interface Library</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lPOzg9OMa_xFPtEemKe4vPAnWno/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lPOzg9OMa_xFPtEemKe4vPAnWno/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lPOzg9OMa_xFPtEemKe4vPAnWno/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lPOzg9OMa_xFPtEemKe4vPAnWno/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br /&gt;For the AJAXians and Web 2.0 citizens amongst you, the wonderful peeps at the Googleplex have done it yet again. Those of you familiar with the concept of &lt;strong&gt;NOT&lt;/strong&gt; reinventing the JavaScript wheel should already be (if not should be) reaping the benefits of the great JavaScript libraries out there. My personal weapon of choice is JQuery (for which you can even get intellisense for in VS2008 these days, check out &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/11/21/jquery-intellisense-in-vs-2008.aspx"&gt;Scott Gu's blog&lt;/a&gt; even if you are not interested in JQuery intellisense, it’s probably the best ASP.NET blog out there). &lt;br /&gt;&lt;br /&gt;Anyway, I digress, one of the problems with these libraries is that they often change frequently and while we all try to keep on top of the changes and new builds even the best of us can miss one. Not only that, having to host the libraries in your projects and then changing code to support a new release can mean that users may still have cached versions of the old JavaScript files stuck in their temporary internet files causing JavaScript errors and in the worst case rendering your AJAX masterpieces unusable.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Enter the Google AJAX Library API&lt;/strong&gt;&lt;br /&gt;The guys at Google have reached out to the major stakeholders in these libraries and are now hosting the different builds of the Libraries for direct loading from google servers. They have committed to maintaining the older versions of these libraries too so there is no chance you can find yourself a couple of JavaScript files less than an application (nice nerdy euphemism there). The cache headers are also set correctly, so this means that you will not have any cached JavaScript issues either.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Setting it all up&lt;/strong&gt;&lt;br /&gt;Setting it up couldn’t be simpler:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;&amp;lt;script src="http://www.google.com/jsapi"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;  // Load jQuery&lt;br /&gt;  google.load("jquery", "1");&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Yes that really is it! For the performance connoisseurs out there, you can choose to add this at the end of your page so the scripts load last (provided nothing is required in the page load).&lt;br /&gt;&lt;br /&gt;Plus you can add as many libraries as you like using google.Load (go for it load the whole lot!)&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;&amp;lt;script src="http://www.google.com/jsapi"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;google.load("jquery", "1.3.0");&lt;br /&gt;google.load("jqueryui", "1.5.3");&lt;br /&gt;google.load("prototype", "1.6.0.3");&lt;br /&gt;google.load("scriptaculous", "1.8.2");&lt;br /&gt;google.load("mootools", "1.2.1");&lt;br /&gt;google.load("dojo", "1.2.3");&lt;br /&gt;google.load("swfobject", "2.1");&lt;br /&gt;google.load("yui", "2.6.0");&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For more information see the complete API documentation at google:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/apis/ajaxlibs/documentation/index.html"&gt;Google AJAX Libraries API&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Happy scripting!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweb2asp.net%2f2009%2f01%2fgoogle-hosts-jquery-scriptaculous.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweb2asp.net%2f2009%2f01%2fgoogle-hosts-jquery-scriptaculous.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-5702719134114559361?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=s92vj6AC"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=2eJw4lmU"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=iOYRhd2P"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=zz95okQa"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=zz95okQa" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=N7vSK8Dv"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=XjonIfTL"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=XjonIfTL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=jzaJHhz8"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=FB4U0mKm"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=FB4U0mKm" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/LMR_1WsoHPc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/LMR_1WsoHPc/google-hosts-jquery-scriptaculous.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://web2asp.net/2009/01/google-hosts-jquery-scriptaculous.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-5131478308465022193</guid><pubDate>Sun, 18 Jan 2009 11:47:00 +0000</pubDate><atom:updated>2009-01-26T18:34:17.107+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">UserControl</category><category domain="http://www.blogger.com/atom/ns#">MasterPage</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><title>Master Pages The n Commandments</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cjKwDOtQC-6tL7ougWdFMRKH-Xk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cjKwDOtQC-6tL7ougWdFMRKH-Xk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cjKwDOtQC-6tL7ougWdFMRKH-Xk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cjKwDOtQC-6tL7ougWdFMRKH-Xk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br /&gt;Used properly the ASP.NET Master Page can be a useful and time saving mechanism, but there are some pitfalls which developers should be aware of and some common architectural mistakes which can render them more trouble than they are worth. Hopefully by reading this you can avoid some of the common (cough?*$ mistakes I already made) problems.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The n Commandments&lt;/strong&gt;&lt;br /&gt;The first mistake I made when using master pages was to look at them as a magic answer to the custom inherited page class many of us used in ASP.NET 1.1, when in actual fact the master page is essentially a solution to a work around that was commonly used back then i.e. stacking up user controls on a page to handle header, content and footer sections. The custom page class is still very much required and while you can get a Master Page to function like it, the heartache involved is simply not worth it. Simply put, the Master Page only acts like a Master when the page is initializing, after that it is essentially a user control and in this we find the cause of most problems. Trust me, keep your custom page class in your app_code directory where it should be and think of the MasterPage as a convenient way to uniformly style sites and to include other site wide tags like CSS and Javascript references.&lt;br /&gt;&lt;br /&gt;The second mistake I made was trying to access Master Page properties from my user controls, while this can be done, it involves referencing the virtual path in the .ascx file then casting Page.Master to the referenced MasterPage.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;.ascx&lt;br /&gt;&amp;lt;%@ Reference VirtualPath="~/MyMasterPage.master" %&amp;gt;&lt;br /&gt;.cs&lt;br /&gt;MyMasterPage m = (MyMasterMaster) Page.Master;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The problem with this is, say for example you start adding a javascript reference from within your user control and then you realize you need to add a different javascript reference from within the page hosting the user control, then adding another reference to the master page in the host page will cause a circular reference. Simply put, it makes much more sense to make the master page clever enough to know what Javascript or CSS references to add. Things like the title tags can be accessed directly&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;&lt;br /&gt;Page.Title&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Another easy mistake is in architectures which involve using multiple user controls on the page, which are shown or hidden depending on the function of that page. While this one is not necessarily isolated to master pages it is important in the context of web 2.0 desktop like web applications which magically have elements appear and disappear. Just because an element is not visible it does not at all mean that the code will not run, I worked on an application recently in which I managed to literally quadruple the speed in a matter of minutes by making sure the code in invisible user controls wasn’t running until actually required. The previous developer had presumed that code only runs if the control is visible (logical), the choice of logically breaking up functions into specific user controls was spot on however, this oversight caused the app to run like a snail on ketamine.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br /&gt;Hopefully these pointers will help you have a painless Master Page experience!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweb2asp.net%2f2009%2f01%2fmaster-pages-n-commandments.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweb2asp.net%2f2009%2f01%2fmaster-pages-n-commandments.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-5131478308465022193?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=VQCcQzKq"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=d8Of2A94"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=EZ3zONV2"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=veHvfEW7"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=veHvfEW7" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=Y1y0kvHL"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=HviCTTR0"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=HviCTTR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=VjUpdDJF"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=KK2w67B0"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=KK2w67B0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/ZqNWc7XC8PU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/ZqNWc7XC8PU/master-pages-n-commandments.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://web2asp.net/2009/01/master-pages-n-commandments.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-6675888985575072727</guid><pubDate>Sat, 17 Jan 2009 12:41:00 +0000</pubDate><atom:updated>2009-01-26T18:32:35.952+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">RSSDataSource</category><category domain="http://www.blogger.com/atom/ns#">RSS</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">content syndication</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET C#</category><category domain="http://www.blogger.com/atom/ns#">RSS Toolkit</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET RSSToolkit</category><title>Using The ASP.NET RSS Toolkit to quickly include syndicated content in your own site</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-H2PGErqCA8DT9f2B2P8p5AS52k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-H2PGErqCA8DT9f2B2P8p5AS52k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-H2PGErqCA8DT9f2B2P8p5AS52k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-H2PGErqCA8DT9f2B2P8p5AS52k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br /&gt;This being the age of the mash up, those of you who have yet to hear about RSS have been living under a rock! RSS (Really Simple Syndication) is the syndication weapon of choice for most blogs and feeds.&lt;br /&gt;  &lt;br /&gt;For those of you who are delving into the possibilities of utilising syndicated content in ASP.NET, the ASP.NET RSS Toolkit is a very powerful yet simple tool which will help you quickly integrate content syndicated from other sites.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Why the RSS Toolkit?&lt;/strong&gt;&lt;br /&gt;Simply put, why reinvent the wheel? I am not one to look a gift horse in the mouth, so when I am presented with a solution which works, you won’t find me asking too many questions. Not so simply put, there are a bunch of solutions out there which do the same job, but, in my humble opinion not quite as well rounded as the RSS Toolkit. At a basic level it provides a very simple interface to provide RSS content to databound controls, not only that but you can also automatically create strongly typed objects for different feeds by using it’s very clever command line utility.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Possible Problems&lt;/strong&gt;&lt;br /&gt;As always, nothing is perfect and the RSS Toolkit currently doesn’t handle RSS feeds which use the Dublin Core meta data specification, but as most of the big blogs and feeds don’t use it for my book this is a small price to pay. Other problems I often read people moaning about are applications which break when the feed is unavailable. This, my friends, is self inflicted and actually bad programming. Rule one is checking that resources exist before trying to use them and of course putting try catch blocks around code which may potentially break under some circumstances, in this case an RSS feed being unavailable, should go without saying (I said it anyway) just to be sure.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Shut up and give me the code!&lt;/strong&gt;&lt;br /&gt;Not mine to give, but you can snag a copy over at codeplex:&lt;br /&gt;&lt;a href="http://www.codeplex.com/ASPNETRSSToolkit"&gt;http://www.codeplex.com/ASPNETRSSToolkit&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Here we simply create an RSS data source for a databound control (in this case a DataGrid).&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;using RssToolkit.Rss;&lt;br /&gt;using RssToolkit.Web.WebControls;&lt;br /&gt;&lt;br /&gt;public partial class FeedTest : System.Web.Page&lt;br /&gt;{&lt;br /&gt; protected void Page_Load(object sender, EventArgs e)&lt;br /&gt; {&lt;br /&gt;RssDataSource rds = new RssDataSource();&lt;br /&gt;  rds.Url = “your choice of feed url goes here”&lt;br /&gt;  dgRSS.DataSource = rds;&lt;br /&gt;  dgRSS.DataBind();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweb2asp.net%2f2009%2f01%2fusing-aspnet-rss-toolkit-to-quickly.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweb2asp.net%2f2009%2f01%2fusing-aspnet-rss-toolkit-to-quickly.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-6675888985575072727?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=dWbDZSpo"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=sGPkmr31"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=prwb5I3x"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=8tkaaR9g"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=8tkaaR9g" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=XBwkS8M8"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=AaqLPVUY"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=AaqLPVUY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=od1x4HSi"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=fsHE1QFb"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=fsHE1QFb" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/C_Ncn0a2aC8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/C_Ncn0a2aC8/using-aspnet-rss-toolkit-to-quickly.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://web2asp.net/2009/01/using-aspnet-rss-toolkit-to-quickly.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-2240142530387473878</guid><pubDate>Fri, 16 Jan 2009 10:52:00 +0000</pubDate><atom:updated>2009-06-26T18:36:04.460+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Softbank</category><category domain="http://www.blogger.com/atom/ns#">DeviceSpecific</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET Mobile Controls</category><category domain="http://www.blogger.com/atom/ns#">Dynamic Rendering</category><category domain="http://www.blogger.com/atom/ns#">AU</category><category domain="http://www.blogger.com/atom/ns#">KDDI</category><category domain="http://www.blogger.com/atom/ns#">Japan</category><category domain="http://www.blogger.com/atom/ns#">DoCoMo</category><title>Mobile ASP.NET Development: Indentifying the main Japanese carriers (DoCoMo, Softbank, AU KDDI, JPhone, Vodafone)</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/p8JMDjmRBBcMChEzMLrOTz8Rd6A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p8JMDjmRBBcMChEzMLrOTz8Rd6A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/p8JMDjmRBBcMChEzMLrOTz8Rd6A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p8JMDjmRBBcMChEzMLrOTz8Rd6A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br /&gt;Those of you who have delved into developing mobile sites with ASP.NET mobile controls, may have come up against a lack of real world examples in the documentation. The benefits of dynamic rendering and device specific rendering look great on paper, but as I have found, while it works a lot of the time there are some limitations. In Japan there are several main carriers who each offer different browsers and capabilities, while this article doesn’t dig deeply into these as there are plenty of online resources and each of the carriers have their own development portals where you can easily find the information you may need. This article describes a way of identifying the main Japanese carriers so that you can handle the user experience accordingly.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Method&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;So how do you do that then? well simply put, each of these carriers browsers have distinct user agents, so we are going create a custom capabilities class to parse the user agent string. To make this work we also need to add a deviceFilters section to our web.config file and lastly we are going to use a DeviceSpecific control in our mobile ASPX page to dynamically render content on a per carrier basis.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Mobile ASPX&lt;/strong&gt;&lt;br /&gt;The string you use for the choice filter must match the name of the device filter in your web.config it is case specific so be careful. Also note that I have surrounded the deviceSpecific control with a panel, this then enables me to find the control in ContentTemplate that I want to manipulate:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;Literal litLink = (Literal)pnCarrier.Content.FindControl(&amp;quot;litLink&amp;quot;);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;  &amp;lt;mobile:Panel ID=&amp;quot;pnlCarrier&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&lt;br /&gt;   &amp;lt;DeviceSpecific ID=&amp;quot;dsCarrier&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&lt;br /&gt;   &amp;lt;Choice Filter=&amp;quot;isDocomo&amp;quot;&amp;gt;&lt;br /&gt;   &amp;lt;ContentTemplate&amp;gt;&lt;br /&gt;   &amp;lt;asp:literal id=&amp;quot;litLink&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;&amp;lt;mobile:TextView ID=&amp;quot;tvBreak&amp;quot; Runat=&amp;quot;server&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/mobile:TextView&amp;gt;&lt;br /&gt;   &amp;lt;/ContentTemplate&amp;gt;&lt;br /&gt;   &amp;lt;/Choice&amp;gt;&lt;br /&gt;   &amp;lt;Choice Filter=&amp;quot;isSoftbank&amp;quot;&amp;gt;&lt;br /&gt;   &amp;lt;ContentTemplate&amp;gt;&lt;br /&gt;   &amp;lt;asp:literal id=&amp;quot;litLink&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;&amp;lt;mobile:TextView ID=&amp;quot;tvBreak&amp;quot; Runat=&amp;quot;server&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/mobile:TextView&amp;gt;&lt;br /&gt;   &amp;lt;/ContentTemplate&amp;gt;&lt;br /&gt;   &amp;lt;/Choice&amp;gt;&lt;br /&gt;   &amp;lt;Choice Filter=&amp;quot;isAuKddi&amp;quot;&amp;gt;&lt;br /&gt;   &amp;lt;ContentTemplate&amp;gt;&lt;br /&gt;   &amp;lt;asp:literal id=&amp;quot;litLink&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;&amp;lt;mobile:TextView ID=&amp;quot;tvBreak&amp;quot; Runat=&amp;quot;server&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/mobile:TextView&amp;gt;&lt;br /&gt;   &amp;lt;/ContentTemplate&amp;gt;&lt;br /&gt;   &amp;lt;/Choice&amp;gt;&lt;br /&gt;   &amp;lt;Choice Filter=&amp;quot;isJPhone&amp;quot;&amp;gt;&lt;br /&gt;   &amp;lt;ContentTemplate&amp;gt;&lt;br /&gt;   &amp;lt;asp:literal id=&amp;quot;litLink&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;&amp;lt;mobile:TextView ID=&amp;quot;tvBreak&amp;quot; Runat=&amp;quot;server&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/mobile:TextView&amp;gt;&lt;br /&gt;   &amp;lt;/ContentTemplate&amp;gt;&lt;br /&gt;   &amp;lt;/Choice&amp;gt;&lt;br /&gt;   &amp;lt;/DeviceSpecific&amp;gt;&lt;br /&gt;  &amp;lt;/mobile:Panel&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Code Behind&lt;/strong&gt;&lt;br /&gt;This code evaluates the selected choice in the device specific control and renders a string accordingly, obviously you would do some more exciting stuff once you have determined the carrier, I used a literal to assign a string for example purposes.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;&lt;br /&gt;  if (dsCarrier.SelectedChoice == null) return;&lt;br /&gt;&lt;br /&gt;  Literal litLink = (Literal)pnCarrier.Content.FindControl(&amp;quot;litLink&amp;quot;);&lt;br /&gt;  switch (dsCarrier.SelectedChoice.Filter)&lt;br /&gt;  {&lt;br /&gt;   case MobileFilterNames.isDocomo:&lt;br /&gt;    litLink.Text = &amp;quot;DoCoMo&amp;quot;;&lt;br /&gt;    break;&lt;br /&gt;   case MobileFilterNames.isAuKddi:&lt;br /&gt;    litLink.Text = &amp;quot;AU KDDI&amp;quot;;&lt;br /&gt;    break;&lt;br /&gt;   case MobileFilterNames.isSoftbank:&lt;br /&gt;    litLink.Text = &amp;quot;SoftBank&amp;quot;;&lt;br /&gt;    break;&lt;br /&gt;   case MobileFilterNames.isJPhone:&lt;br /&gt;    litLink.Text = &amp;quot;J-Phone&amp;quot;;&lt;br /&gt;    break;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Custom Capabilities Class Code&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Each of the methods which evaluate the carrier take the parameters MobileCapabilities and a string argument, they are also public and static and return boolean values.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Web.Mobile;&lt;br /&gt;&lt;br /&gt;namespace Dlr&lt;br /&gt;{&lt;br /&gt; public class MobileCapabilityEvaluators&lt;br /&gt; {&lt;br /&gt;  #region MemberVariables&lt;br /&gt;&lt;br /&gt;  private readonly static string[] SoftBankUserAgentList = new string[]&lt;br /&gt;  {&lt;br /&gt;   &amp;quot;Vodafone&amp;quot;,&lt;br /&gt;   &amp;quot;SoftBank&amp;quot;,&lt;br /&gt;  };&lt;br /&gt;&lt;br /&gt;  private readonly static string[] JphoneUserAgentList = new string[]&lt;br /&gt;  {&lt;br /&gt;   &amp;quot;J-PHONE&amp;quot;,&lt;br /&gt;  };&lt;br /&gt;&lt;br /&gt;  private readonly static string[] AuKddiUserAgentList = new string[]&lt;br /&gt;  {&lt;br /&gt;   &amp;quot;KDDI&amp;quot;,&lt;br /&gt;  };&lt;br /&gt;&lt;br /&gt;  private readonly static string[] DocomoUserAgentList = new string[]&lt;br /&gt;  {&lt;br /&gt;   &amp;quot;DOCOMO/2.0&amp;quot;,&lt;br /&gt;  };&lt;br /&gt;&lt;br /&gt;  private readonly static string[] RegularUserAgentList = new string[]&lt;br /&gt;  {&lt;br /&gt;   &amp;quot;Mozilla/4.0&amp;quot;,&lt;br /&gt;   &amp;quot;Mozilla/5.0&amp;quot;,&lt;br /&gt;  };&lt;br /&gt;&lt;br /&gt;  #endregion&lt;br /&gt;&lt;br /&gt;  #region isSoftBank&lt;br /&gt;&lt;br /&gt;  /// &amp;lt;summary&amp;gt;&lt;br /&gt;  /// Determines whether [is soft bank] [the specified capabilities].&lt;br /&gt;  /// &amp;lt;/summary&amp;gt;&lt;br /&gt;  /// &amp;lt;param name=&amp;quot;capabilities&amp;quot;&amp;gt;The capabilities.&amp;lt;/param&amp;gt;&lt;br /&gt;  /// &amp;lt;param name=&amp;quot;argument&amp;quot;&amp;gt;The argument.&amp;lt;/param&amp;gt;&lt;br /&gt;  /// &amp;lt;returns&amp;gt;&lt;br /&gt;  ///  &amp;lt;c&amp;gt;true&amp;lt;/c&amp;gt; if [is soft bank] [the specified capabilities]; otherwise, &amp;lt;c&amp;gt;false&amp;lt;/c&amp;gt;.&lt;br /&gt;  /// &amp;lt;/returns&amp;gt;&lt;br /&gt;  public static bool IsSoftbank(MobileCapabilities capabilities, string argument)&lt;br /&gt;  {&lt;br /&gt;   if (HttpContext.Current.Request.UserAgent != null)&lt;br /&gt;   {&lt;br /&gt;    string[] agentInfo = HttpContext.Current.Request.UserAgent.Split('/');&lt;br /&gt;    if (agentInfo.Length == 0)&lt;br /&gt;     return false;&lt;br /&gt;    foreach (string agent in SoftBankUserAgentList)&lt;br /&gt;     if (agentInfo[0].ToLower().Contains(agent.ToLower()))&lt;br /&gt;      return true;&lt;br /&gt;   }&lt;br /&gt;   return false;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  #endregion&lt;br /&gt;&lt;br /&gt;  #region isJPhone&lt;br /&gt;&lt;br /&gt;  /// &amp;lt;summary&amp;gt;&lt;br /&gt;  /// Determines whether [is soft bank] [the specified capabilities].&lt;br /&gt;  /// &amp;lt;/summary&amp;gt;&lt;br /&gt;  /// &amp;lt;param name=&amp;quot;capabilities&amp;quot;&amp;gt;The capabilities.&amp;lt;/param&amp;gt;&lt;br /&gt;  /// &amp;lt;param name=&amp;quot;argument&amp;quot;&amp;gt;The argument.&amp;lt;/param&amp;gt;&lt;br /&gt;  /// &amp;lt;returns&amp;gt;&lt;br /&gt;  ///  &amp;lt;c&amp;gt;true&amp;lt;/c&amp;gt; if [is soft bank] [the specified capabilities]; otherwise, &amp;lt;c&amp;gt;false&amp;lt;/c&amp;gt;.&lt;br /&gt;  /// &amp;lt;/returns&amp;gt;&lt;br /&gt;  public static bool IsJPhone(MobileCapabilities capabilities, string argument)&lt;br /&gt;  {&lt;br /&gt;   if (HttpContext.Current.Request.UserAgent != null)&lt;br /&gt;   {&lt;br /&gt;    string[] agentInfo = HttpContext.Current.Request.UserAgent.Split('/');&lt;br /&gt;    if (agentInfo.Length == 0)&lt;br /&gt;     return false;&lt;br /&gt;    foreach (string agent in JphoneUserAgentList)&lt;br /&gt;     if (agentInfo[0].ToLower().Contains(agent.ToLower()))&lt;br /&gt;      return true;&lt;br /&gt;   }&lt;br /&gt;   return false;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  #endregion&lt;br /&gt;&lt;br /&gt;  #region isAuKddi&lt;br /&gt;&lt;br /&gt;  /// &amp;lt;summary&amp;gt;&lt;br /&gt;  /// Determines whether [is au kddi] [the specified capabilities].&lt;br /&gt;  /// &amp;lt;/summary&amp;gt;&lt;br /&gt;  /// &amp;lt;param name=&amp;quot;capabilities&amp;quot;&amp;gt;The capabilities.&amp;lt;/param&amp;gt;&lt;br /&gt;  /// &amp;lt;param name=&amp;quot;argument&amp;quot;&amp;gt;The argument.&amp;lt;/param&amp;gt;&lt;br /&gt;  /// &amp;lt;returns&amp;gt;&lt;br /&gt;  ///  &amp;lt;c&amp;gt;true&amp;lt;/c&amp;gt; if [is au kddi] [the specified capabilities]; otherwise, &amp;lt;c&amp;gt;false&amp;lt;/c&amp;gt;.&lt;br /&gt;  /// &amp;lt;/returns&amp;gt;&lt;br /&gt;  public static bool IsAuKddi(MobileCapabilities capabilities, string argument)&lt;br /&gt;  {&lt;br /&gt;   if (HttpContext.Current.Request.UserAgent != null)&lt;br /&gt;   {&lt;br /&gt;    string[] agentInfo = HttpContext.Current.Request.UserAgent.Split('/');&lt;br /&gt;    if (agentInfo.Length == 0)&lt;br /&gt;     return false;&lt;br /&gt;    foreach (string agent in AuKddiUserAgentList)&lt;br /&gt;     if (agentInfo[0].ToLower().Contains(agent.ToLower()))&lt;br /&gt;      return true;&lt;br /&gt;   }&lt;br /&gt;   return false;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  #endregion&lt;br /&gt;&lt;br /&gt;  #region isDocomo&lt;br /&gt;&lt;br /&gt;  /// &amp;lt;summary&amp;gt;&lt;br /&gt;  /// Determines whether [is docomo] [the specified capabilities].&lt;br /&gt;  /// &amp;lt;/summary&amp;gt;&lt;br /&gt;  /// &amp;lt;param name=&amp;quot;capabilities&amp;quot;&amp;gt;The capabilities.&amp;lt;/param&amp;gt;&lt;br /&gt;  /// &amp;lt;param name=&amp;quot;argument&amp;quot;&amp;gt;The argument.&amp;lt;/param&amp;gt;&lt;br /&gt;  /// &amp;lt;returns&amp;gt;&lt;br /&gt;  ///  &amp;lt;c&amp;gt;true&amp;lt;/c&amp;gt; if [is docomo] [the specified capabilities]; otherwise, &amp;lt;c&amp;gt;false&amp;lt;/c&amp;gt;.&lt;br /&gt;  /// &amp;lt;/returns&amp;gt;&lt;br /&gt;  public static bool IsDocomo(MobileCapabilities capabilities, string argument)&lt;br /&gt;  {&lt;br /&gt;   if (HttpContext.Current.Request.UserAgent != null)&lt;br /&gt;   {&lt;br /&gt;    string userAgent = HttpContext.Current.Request.UserAgent;&lt;br /&gt;    if (userAgent.Length == 0)&lt;br /&gt;     return false;&lt;br /&gt;    foreach (string agent in DocomoUserAgentList)&lt;br /&gt;     if (userAgent.ToLower().Contains(agent.ToLower()))&lt;br /&gt;      return true;&lt;br /&gt;   }&lt;br /&gt;   return false;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  #endregion&lt;br /&gt;&lt;br /&gt;  #region isRegular&lt;br /&gt;&lt;br /&gt;  /// &amp;lt;summary&amp;gt;&lt;br /&gt;  /// Determines whether [is regular] [the specified capabilities].&lt;br /&gt;  /// &amp;lt;/summary&amp;gt;&lt;br /&gt;  /// &amp;lt;param name=&amp;quot;capabilities&amp;quot;&amp;gt;The capabilities.&amp;lt;/param&amp;gt;&lt;br /&gt;  /// &amp;lt;param name=&amp;quot;argument&amp;quot;&amp;gt;The argument.&amp;lt;/param&amp;gt;&lt;br /&gt;  /// &amp;lt;returns&amp;gt;&lt;br /&gt;  ///  &amp;lt;c&amp;gt;true&amp;lt;/c&amp;gt; if [is regular] [the specified capabilities]; otherwise, &amp;lt;c&amp;gt;false&amp;lt;/c&amp;gt;.&lt;br /&gt;  /// &amp;lt;/returns&amp;gt;&lt;br /&gt;  public static bool IsRegular(MobileCapabilities capabilities, string argument)&lt;br /&gt;  {&lt;br /&gt;   if (HttpContext.Current.Request.UserAgent != null)&lt;br /&gt;   {&lt;br /&gt;    string userAgent = HttpContext.Current.Request.UserAgent;&lt;br /&gt;    if (userAgent.Length == 0)&lt;br /&gt;     return false;&lt;br /&gt;    foreach (string agent in RegularUserAgentList)&lt;br /&gt;     if (userAgent.ToLower().Contains(agent.ToLower()))&lt;br /&gt;      return true;&lt;br /&gt;   }&lt;br /&gt;   return false;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  #endregion&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;web.config&lt;/strong&gt;&lt;br /&gt;Notice each filter has a unique name, points to the class and assembly and lastly indicates the method in the class used to determine whether the filter returns true. &lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt; &amp;lt;deviceFilters&amp;gt;&lt;br /&gt;  &amp;lt;filter name=&amp;quot;isDocomo&amp;quot; type=&amp;quot;Dlr.MobileCapabilityEvaluators,Dlr &amp;quot; method=&amp;quot;IsDocomo&amp;quot;/&amp;gt;&lt;br /&gt;  &amp;lt;filter name=&amp;quot;isSoftbank&amp;quot; type=&amp;quot;Dlr.MobileCapabilityEvaluators,Dlr &amp;quot; method=&amp;quot;IsSoftbank&amp;quot;/&amp;gt;&lt;br /&gt;  &amp;lt;filter name=&amp;quot;isAuKddi&amp;quot; type=&amp;quot;Dlr.MobileCapabilityEvaluators,Dlr &amp;quot; method=&amp;quot;IsAuKddi&amp;quot;/&amp;gt;&lt;br /&gt;  &amp;lt;filter name=&amp;quot;isRegular&amp;quot; type=&amp;quot;Dlr.MobileCapabilityEvaluators,Dlr &amp;quot; method=&amp;quot;IsRegular&amp;quot;/&amp;gt;&lt;br /&gt;  &amp;lt;filter name=&amp;quot;isJPhone&amp;quot; type=&amp;quot;Dlr. MobileCapabilityEvaluators,Dlr &amp;quot; method=&amp;quot;IsJPhone&amp;quot;/&amp;gt;&lt;br /&gt; &amp;lt;/deviceFilters&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweb2asp.net%2f2009%2f01%2fmobile-aspnet-development-indentifying.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweb2asp.net%2f2009%2f01%2fmobile-aspnet-development-indentifying.html" border="0" alt="kick it on DotNetKicks.com"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-2240142530387473878?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=ZEjKaOc4"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=fUpZogsJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=Hc7gDyhm"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=koQ7mEci"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=koQ7mEci" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=igVjrAuL"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=xL5Mvmmh"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=xL5Mvmmh" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=fGvgjZ4U"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=LI8jXP7u"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=LI8jXP7u" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/fpoJTdQ9LcM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/fpoJTdQ9LcM/mobile-aspnet-development-indentifying.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://web2asp.net/2009/01/mobile-aspnet-development-indentifying.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-1782446959220318815</guid><pubDate>Thu, 15 Jan 2009 08:51:00 +0000</pubDate><atom:updated>2009-01-20T05:26:51.472+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">WebMethods</category><category domain="http://www.blogger.com/atom/ns#">AJAX</category><category domain="http://www.blogger.com/atom/ns#">Tracking Visitors</category><category domain="http://www.blogger.com/atom/ns#">ScriptManager</category><category domain="http://www.blogger.com/atom/ns#">PageMethods</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET C#</category><title>Tracking visitors in ASP.NET by using an image and AJAX PageMethods</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/t-NTjy6d2p1QQf1BPX3jdZwoxHI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t-NTjy6d2p1QQf1BPX3jdZwoxHI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/t-NTjy6d2p1QQf1BPX3jdZwoxHI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t-NTjy6d2p1QQf1BPX3jdZwoxHI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br /&gt;I often see developers asking for ways to track page usage so I thought I’d share a trick I often use, it’s very simple, doesn’t require Http Handlers and takes just a couple of minutes to implement.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Method&lt;/strong&gt;&lt;br /&gt;Ok, so let’s get to it as it will take you less time to implement than it takes me to tell you! Every image has an onload event associated with it, so using this event we are going to call a page method in our code behind file *blink* yes that simple! Slapping yourself already, yes I did too when it came to me.&lt;br /&gt;&lt;br /&gt;1. Add a script manager to your page or master page (tut tut if don’t have one already, this is the AJAX revolution!) Make sure you set the EnablePageMethods property to true). Also make sure the script manager is inside your form tag.&lt;br /&gt;2. Create a public static method in your code behind with [WebMethod] above it and add  System.Web.Webservices to your usings. Add your handling code, you could update your database, increment a counter or write to a log file.&lt;br /&gt;3. Add an image to your page which has an onload=”PageMethods.TheNameOfYourPageMethod” attribute.&lt;br /&gt;&lt;br /&gt;You’re done! Pat yourself on your back and grab a latte&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Code&lt;br /&gt;aspx&lt;/strong&gt;&lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;&amp;lt;asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"/&amp;gt;&lt;br /&gt;&amp;lt;img src="clear.png" onload="PageMethods.HandleImageLoad()" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;strong&gt;Code behind&lt;/strong&gt;&lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;using System.Web.Services;&lt;br /&gt;&lt;br /&gt;public partial class _Default : System.Web.UI.Page &lt;br /&gt;{&lt;br /&gt; [WebMethod]&lt;br /&gt; public static void HandleImageLoad()&lt;br /&gt; {&lt;br /&gt;  // handling here&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-1782446959220318815?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=v7k6RL2x"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=uMX58HWk"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=R00lJ9I9"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=QwJKhoqD"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=QwJKhoqD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=Ln9tsT5u"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=MkR4sAtC"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=MkR4sAtC" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=0IASESXy"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=hc0jESgy"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=hc0jESgy" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/3gBK-t7rar0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/3gBK-t7rar0/tracking-visitors-in-aspnet-by-using.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://web2asp.net/2009/01/tracking-visitors-in-aspnet-by-using.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-249410671108708463</guid><pubDate>Wed, 14 Jan 2009 13:09:00 +0000</pubDate><atom:updated>2009-01-15T01:12:10.394+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Custom Error Pages</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET C#</category><category domain="http://www.blogger.com/atom/ns#">Custom Page Class</category><category domain="http://www.blogger.com/atom/ns#">Custom Error Messages</category><title>ASP.NET Error Handling</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7pbgH-SiAQAVGOwmVa1tCSqzO4M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7pbgH-SiAQAVGOwmVa1tCSqzO4M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7pbgH-SiAQAVGOwmVa1tCSqzO4M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7pbgH-SiAQAVGOwmVa1tCSqzO4M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br /&gt;When developing a site there are bound to be occasions when despite our best efforts, errors will occur. ASP.NET has some built in facilities for handling this like custom error pages. In practice, however, we often need more information about the error so we can address the issue.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Custom Page Class&lt;/strong&gt;&lt;br /&gt;While a MasterPages might seem to be the obvious place to handle application errors, a Master Page only really behaves like a master page up to rendering then essentially acts like a user control. Also, it is quite possible that you would have several master pages in any web application. With that in mind the more logical approach would be the custom page class.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;br /&gt;To make a custom page class you simply create a new class in the app_code folder which inherits from the System.Web.Page class, then, you simply override the OnError event and implement your error handling code. My weapon of choice is email, as it is pretty instantaneous and allows you to act quickly in response to potential problems (I do not operate on the ignorance is bliss development process!). Lastly you make all your aspx pages inherit from your custom page class.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;using System.Web&lt;br /&gt;&lt;br /&gt;public class CustomPage : Page&lt;br /&gt;{&lt;br /&gt; protected override void OnError(EventArgs e)&lt;br /&gt; {&lt;br /&gt;  base.OnError(e);&lt;br /&gt;  var ex = Server.GetLastError();&lt;br /&gt;  var hc = HttpContext.Current;&lt;br /&gt;&lt;br /&gt;  var requestUrl = hc.Request.Url.ToString();&lt;br /&gt;  var emailSender = “senders email address goes here ”;&lt;br /&gt;  var emailSubject = "error @ site: " + requestUrl;&lt;br /&gt;  const string emailRecipient = "your email address goes here";&lt;br /&gt;&lt;br /&gt;  var sb = new StringBuilder();&lt;br /&gt;&lt;br /&gt;  // include information about the current web request&lt;br /&gt;  sb.AppendFormat("Time: {0}\n", DateTime.Now.ToString("g"));&lt;br /&gt;  sb.AppendFormat("URL: {0}\n", requestUrl);&lt;br /&gt;  sb.AppendFormat("Is HTTPS: {0}\n", hc.Request.IsSecureConnection);&lt;br /&gt;  sb.AppendFormat("URL Referrer: {0}\n", hc.Request.UrlReferrer);&lt;br /&gt;  sb.AppendFormat("Server Name: {0}\n", hc.Request.ServerVariables["SERVER_NAME"]);&lt;br /&gt;  sb.AppendFormat("QueryString: {0}\n", hc.Request.QueryString);&lt;br /&gt;  sb.AppendFormat("Platform: {0}\n", hc.Request.Browser.Platform);&lt;br /&gt;  sb.AppendFormat("Is Crawler: {0}\n", hc.Request.Browser.Crawler);&lt;br /&gt;  sb.AppendFormat("User Agent: {0}\n", hc.Request.UserAgent);&lt;br /&gt;  sb.AppendFormat("Supports Cookies: {0}\n", hc.Request.Browser.Cookies);&lt;br /&gt;  sb.AppendFormat("User IP: {0}\n", hc.Request.UserHostAddress);&lt;br /&gt;  sb.AppendFormat("User Host Name: {0}\n", hc.Request.UserHostName);&lt;br /&gt;  sb.AppendFormat("User is Authenticated: {0}", hc.User.Identity.IsAuthenticated);&lt;br /&gt;  sb.AppendFormat("\n\n");&lt;br /&gt;&lt;br /&gt;  var message = ex.Message;&lt;br /&gt;&lt;br /&gt;  while (ex != null)&lt;br /&gt;  {&lt;br /&gt;   sb.AppendFormat("Message: {0}\n", message);&lt;br /&gt;   sb.AppendFormat("Source: {0}\n", ex.Source);&lt;br /&gt;   sb.AppendFormat("TargetSite: {0}\n", ex.TargetSite);&lt;br /&gt;   sb.AppendFormat("StackTrace: {0}", ex.StackTrace);&lt;br /&gt;   sb.AppendFormat("\n\n");&lt;br /&gt;&lt;br /&gt;   ex = ex.InnerException;&lt;br /&gt;  }&lt;br /&gt;  var m = new MailMessage(emailSender, emailRecipient, emailSubject, sb.ToString());&lt;br /&gt;&lt;br /&gt;  var smtp = requestUrl.Contains("localhost")&lt;br /&gt;              ? new SmtpClient("localhost")&lt;br /&gt;              : new SmtpClient(“smtp server address goes here usually localhost for most hosting companies”);&lt;br /&gt;&lt;br /&gt;  smtp.Send(m);&lt;br /&gt;  Response.Redirect(“your error url goes here”);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Explanation&lt;/strong&gt;&lt;br /&gt;In the above code quite a lot of information has been collected in addition to the basic error messages which can be very useful when trying to detect the problem. Also, the code digs down into the inner exceptions so that you see all of the bubbled exceptions. Lastly the user is redirected to a user friendly error page of your choice; this means that you are not exposing your users to the standard ASP.NET error pages which are meaningless to anyone except the developer of the application.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-249410671108708463?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=jPQgFIsL"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=45INzXI6"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=FOzPH3ak"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=qfk5b4yb"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=qfk5b4yb" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=R6FiE7QM"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=zHqZZSqk"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=zHqZZSqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=w7npXUGN"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=IWUOAap6"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=IWUOAap6" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/GHhI2MYtmOs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/GHhI2MYtmOs/aspnet-error-handling.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://web2asp.net/2009/01/aspnet-error-handling.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8031142319236689228.post-7009186653914481310</guid><pubDate>Tue, 13 Jan 2009 06:12:00 +0000</pubDate><atom:updated>2009-01-26T18:39:04.689+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASPOSE</category><category domain="http://www.blogger.com/atom/ns#">CSV</category><category domain="http://www.blogger.com/atom/ns#">Microsoft Office</category><category domain="http://www.blogger.com/atom/ns#">Excel Report</category><category domain="http://www.blogger.com/atom/ns#">benefit portal</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio Express</category><category domain="http://www.blogger.com/atom/ns#">XML</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET C#</category><category domain="http://www.blogger.com/atom/ns#">Microsoft Excel</category><category domain="http://www.blogger.com/atom/ns#">SpreadsheetGear</category><title>Generating Excel Reports from ASP.NET applications</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/l8BdkoN2qRNG9LIF0-qa_BxLD64/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l8BdkoN2qRNG9LIF0-qa_BxLD64/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/l8BdkoN2qRNG9LIF0-qa_BxLD64/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l8BdkoN2qRNG9LIF0-qa_BxLD64/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br /&gt;I see this question a lot in forums. So you made your all singing and dancing application and have beautifully styled your DataGrid, GridView or Repeater, finely tuned your report query in the database for lightening responses, there you sit marvelling your own creativity and programming prowess. That’s when you get the call from the client…&lt;br /&gt;&lt;br /&gt;They want the data in an exportable format!!! Deafening silence, welcome to the real world, most mere mortals would rather use their favourite spreadsheet software than your blood sweat and tears creation. We developers shouldn’t take this as anything but logical choice. These programs are popular for a reason and have been around long enough that most users have already reached the tip of their learning curve. I would argue that your ability to be successful as a solution provider lies in providing solutions that fit neatly into existing ones and moreover lever and in a sense mash up tried and tested solutions and software. My question is: why re-invent the wheel?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Different Approaches&lt;/strong&gt;&lt;br /&gt;There are plenty of ways to export reports (CSV, Flat file and XML to name a few), but whether you like it or not most people use Excel or open source offerings like Open Office. Excel will open various file formats and you can trick excel by saving CSV files or even html tables with a .xls extension. If you have access to an ms office license, you can access the office com interop objects and generate spreadsheets that way. Lastly and perhaps the neatest of the solutions is to buy one of the out of the box solutions which provide standalone assemblies for generating spreadsheets like ASPOSE.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Million Dollar Question&lt;/strong&gt;&lt;br /&gt;which one of these should I use?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Million Dollar Answer&lt;/strong&gt;&lt;br /&gt;Any of them will achieve roughly the same outcome so it’s up to you.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;My Choice&lt;/strong&gt;&lt;br /&gt;I have supplied solutions which export files based on the first method above, i.e. convert my data to XML or CSV content then export a file which has a .xls extension and set the Response Content Type header to excel:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;Response.ContentType = "application/vnd.ms-excel";&lt;br /&gt;Response.AddHeader("content-disposition", "attachment;filename=Management Report.xls");&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The problem with this is that you are essentially cheating and while Excel will likely open the file, the user may get a prompt about the content when trying to open the file (something like the content not matching the extension). Also, if they were to use another program to import that file, then they would need to save it again from excel to ensure that the proper formatting is applied. I really see this as a quick and dirty approach which has its uses in some scenarios but does not really cut it for professional level solutions.&lt;br /&gt;&lt;br /&gt;Using com interop in web applications is not my weapon of choice either and you really need to understand the concept of using unmanaged resources before you even attempt this method.&lt;br /&gt;&lt;br /&gt;This leaves using a third party solution or writing your own (good luck to you). Third party solutions tend to be expensive, so unless your pockets are deep or your budget is large, which in the current recession is unlikely as companies are feeling the pinch, you are stuck.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Secret&lt;/strong&gt;&lt;br /&gt;If you have ever downloaded the express versions of Visual Studio you will be asked to register the product, this entitles you to access to some pretty useful benefits in the benefit portal. One of these is SpreadSheetGear 2006, which essentially allows royalty free generation of spreadsheets from web applications (and windows apps if that is your cup of tea). It is as simple as adding a reference to the SpreadSheetGear assembly to your application, adding a using reference in your page or control then you have just to write some intuitive code to export to a file:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;DataTable dt = /*get your data table here*/&lt;br /&gt;IWorkbook workbook = Factory.GetWorkbook();&lt;br /&gt;IWorksheet worksheet = workbook.Worksheets["Sheet1"];&lt;br /&gt;IRange cells = worksheet.Range;cells.CopyFromDataTable(dt, SpreadsheetGear.Data.SetDataFlags.NoColumnHeaders);&lt;br /&gt;&lt;br /&gt;// Auto size all worksheet columns which contain data&lt;br /&gt;worksheet.UsedRange.Columns.AutoFit();&lt;br /&gt;&lt;br /&gt;// Stream the Excel spreadsheet to the client in a format&lt;br /&gt;// compatible with Excel 97/2000/XP/2003/2007.&lt;br /&gt;Response.Clear();&lt;br /&gt;Response.ContentType = "application/vnd.ms-excel";&lt;br /&gt;Response.AddHeader("Content-Disposition", "attachment; filename=" yourfilename.xls");&lt;br /&gt;workbook.SaveToStream(Response.OutputStream, FileFormat.XLS97);&lt;br /&gt;Response.End();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The above is a very simple example, you can produce heavily styled reports using the same assembly by selecting ranges and applying styles accordingly. Obviously there is a learning curve, but it is a clean elegant solution which generates properly formatted Excel Files that could have otherwise cost big bucks.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweb2asp.net%2f2009%2f01%2fgenerating-excel-reports-from-aspnet.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweb2asp.net%2f2009%2f01%2fgenerating-excel-reports-from-aspnet.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8031142319236689228-7009186653914481310?l=web2asp.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=ULlNSaCg"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=NjYgI0im"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=z5XjBc9k"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=Q3S7KtDm"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=Q3S7KtDm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=9ooODzy4"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=obNjdbaB"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=obNjdbaB" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=4BhXejMR"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/web2aspnetfeed?a=RnOMwP6v"&gt;&lt;img src="http://feeds.feedburner.com/~f/web2aspnetfeed?i=RnOMwP6v" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/web2aspnetfeed/~4/luOWzbkM3cQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/web2aspnetfeed/~3/luOWzbkM3cQ/generating-excel-reports-from-aspnet.html</link><author>noreply@blogger.com (David Ridgway)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://web2asp.net/2009/01/generating-excel-reports-from-aspnet.html</feedburner:origLink></item></channel></rss>
