<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">ScottGu's Blog</title><subtitle type="html">Scott Guthrie lives in Seattle and builds a few products for Microsoft</subtitle><id>http://weblogs.asp.net/scottgu/atom.aspx</id><link rel="alternate" type="text/html" href="http://weblogs.asp.net/scottgu/default.aspx" /><link rel="self" type="application/atom+xml" href="http://weblogs.asp.net/scottgu/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20510.895">Community Server</generator><updated>2008-12-02T00:43:00Z</updated><entry><title>ASP.NET MVC Talk in Reading UK July 3rd</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/scottgu/archive/2009/07/02/asp-net-mvc-talk-in-reading-uk-july-3rd.aspx" /><id>http://weblogs.asp.net/scottgu/archive/2009/07/02/asp-net-mvc-talk-in-reading-uk-july-3rd.aspx</id><published>2009-07-02T08:11:20Z</published><updated>2009-07-02T08:11:20Z</updated><content type="html">&lt;font size="2" face="arial"&gt;   &lt;p&gt;I’m in the UK today and tomorrow (on my way back from a trip to India for two days earlier this week), and am giving two tech talks while in town.&amp;#160; &lt;/p&gt;    &lt;p&gt;The first is this evening at a &lt;a href="http://tech.groups.yahoo.com/group/LondonDotNet/" target="_blank"&gt;London .NET User Group event&lt;/a&gt;.&amp;#160; I’ll be presenting Silverlight 3.&amp;#160; Unfortunately the event is already over-registered – so if you haven’t registered yet you’ll need to catch it the next time I’m in town.&lt;/p&gt;    &lt;p&gt;The second talk is tomorrow (Friday) from 1-4pm at the Microsoft facility in Reading and is on &lt;a href="http://scott-mvc.eventbrite.com/" target="_blank"&gt;ASP.NET MVC&lt;/a&gt;.&amp;#160; When we first announced it last week it also over-registered quickly.&amp;#160; Thankfully my hosts were able to get a larger room this week, though, so another 120 spots became available.&amp;#160; &lt;/p&gt;    &lt;p&gt;You can &lt;a href="http://scott-mvc.eventbrite.com/" target="_blank"&gt;register to attend&lt;/a&gt; the talk for free until 4pm today if you want to attend.&amp;#160; Hurry, though, as there are only 43 seats left (down from 57 seats when I first started writing this blog post).&lt;/p&gt;    &lt;p&gt;Hope to see some of you there,&lt;/p&gt;    &lt;p&gt;Scott&lt;/p&gt; &lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7138478" width="1" height="1"&gt;</content><author><name>ScottGu</name><uri>http://weblogs.asp.net/members/ScottGu.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/ASP.NET/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/.NET/default.aspx" /><category term="Talks" scheme="http://weblogs.asp.net/scottgu/archive/tags/Talks/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/scottgu/archive/tags/Community+News/default.aspx" /></entry><entry><title>June 7th Links: ASP.NET, AJAX, ASP.NET MVC, Visual Studio</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/scottgu/archive/2009/06/07/june-7th-links-asp-net-ajax-asp-net-mvc-visual-studio.aspx" /><id>http://weblogs.asp.net/scottgu/archive/2009/06/07/june-7th-links-asp-net-ajax-asp-net-mvc-visual-studio.aspx</id><published>2009-06-07T07:05:52Z</published><updated>2009-06-07T07:05:52Z</updated><content type="html">&lt;font size="2" face="arial"&gt;   &lt;p&gt;Here is the latest in my &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/05/30/may-30th-links-asp-net-ajax-asp-net-mvc-visual-studio.aspx" target="_blank"&gt;link-listing series&lt;/a&gt;.&amp;#160; Also check out my &lt;a href="http://weblogs.asp.net/scottgu/pages/ASP.NET-2.0-Tips_2C00_-Tricks_2C00_-Recipes-and-Gotchas.aspx" target="_blank"&gt;ASP.NET Tips, Tricks and Tutorials page&lt;/a&gt; and &lt;a href="http://weblogs.asp.net/scottgu/pages/silverlight-posts.aspx" target="_blank"&gt;Silverlight Tutorials page&lt;/a&gt; for links to popular articles I've done myself in the past. &lt;/p&gt;    &lt;p&gt;You can also now follow me on twitter (&lt;a href="http://twitter.com/scottgu" target="_blank"&gt;@scottgu&lt;/a&gt;) where I also post links and small posts.&lt;/p&gt;    &lt;h3&gt;&lt;u&gt;ASP.NET&lt;/u&gt;&lt;/h3&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://www.4guysfromrolla.com/articles/060309-1.aspx" target="_blank"&gt;Implementing Incremental Navigation with ASP.NET&lt;/a&gt;: A nice article from Andrew Wrigley that describes how to use ASP.NET’s Site Navigation system to create a navigation user interface.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://aspnet.4guysfromrolla.com/articles/031809-1.aspx" target="_blank"&gt;Syndicating and Consuming RSS Feeds in ASP.NET&lt;/a&gt;: A nice article from Scott Mitchell that describes how to work with RSS using ASP.NET 3.5.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://aspnet.4guysfromrolla.com/articles/022509-1.aspx" target="_blank"&gt;Using Expression Builders in ASP.NET&lt;/a&gt;: Scott Mitchell has another good article that describes a little-known extensibility feature in ASP.NET.&amp;#160; &lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://aspnet.4guysfromrolla.com/articles/122408-1.aspx" target="_blank"&gt;Apply ASP.NET Authentication/Authorization to Static Content&lt;/a&gt;: Scott Mitchell has another great article that describes how to apply ASP.NET’s Security features to static content (html/images/etc) using IIS7.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://highoncoding.com/Articles/562_GridView_Confirmation_Box_Using_JQuery_BlockUI.aspx" target="_blank"&gt;GridView Confirmation Box using jQuery&lt;/a&gt;: Mohammed Azam has a nice post that describes how to implement model confirmation UI using jQuery.&amp;#160; This is particularly useful for scenarios like saving or deleting data.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;h3&gt;&lt;u&gt;AJAX&lt;/u&gt;&lt;/h3&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://aspnet.4guysfromrolla.com/articles/040809-1.aspx" target="_blank"&gt;Building Interactive UI with AJAX – A look at JSON Serialization&lt;/a&gt;: Scott Mitchell has a nice article that explores the JSON serialization format used by ASP.NET AJAX when calling web-services and server end-points from client-side script.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://aspnet.4guysfromrolla.com/articles/011409-1.aspx" target="_blank"&gt;Building Interactive UI with AJAX: Retrieving Server-Side Data using Web Services:&lt;/a&gt; Another good article by Scott Mitchell that describes how to call web-services to retrieve data from client-side script.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://aspnet.4guysfromrolla.com/articles/012109-1.aspx" target="_blank"&gt;Periodically Updating the Screen and Web Page Title with ASP.NET AJAX:&lt;/a&gt; Scott Mitchell demonstrates how to use ASP.NET AJAX to dynamically update client screens with new data.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://blogs.visoftinc.com/archive/2009/04/28/ASP.NET-4.0-AJAX-Preview-4-Client-Templates.aspx" target="_blank"&gt;ASP.NET 4.0 AJAX – Client Templates&lt;/a&gt;: Damien White has a great post that describes the new client templating support in ASP.NET AJAX.&amp;#160; This provides an easy and powerful way to dynamically create rich HTML UI on the client.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://blogs.visoftinc.com/archive/2009/05/21/ASP.NET-4.0-AJAX-Preview-4-JavaScript-Observer-Pattern.aspx" target="_blank"&gt;ASP.NET 4.0 AJAX – JavaScript Observer Pattern&lt;/a&gt;: Damien White has yet another great article that describes the new client-side JavaScript observer pattern being introduced with ASP.NET AJAX.&amp;#160; &lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://blogs.visoftinc.com/archive/2009/05/27/ASP.NET-4.0-AJAX-Preview-4-Data-Binding.aspx" target="_blank"&gt;ASP.NET 4.0 AJAX - Data Binding&lt;/a&gt;: Damien White continues his great ASP.NET AJAX series with this article that describes the new client-side data binding features in the new version of ASP.NET AJAX.&amp;#160; &lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;h3&gt;&lt;u&gt;ASP.NET MVC&lt;/u&gt;&lt;/h3&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://devermind.com/linq/aspnet-mvc-tip-turn-on-compile-time-view-checking" target="_blank"&gt;Tip: Turn on compile-time View Checking&lt;/a&gt;: A nice post from Adrian Grigore who demonstrates how to easily enable compile-time checking of your ASP.NET MVC view files.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://blog.codeville.net/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/" target="_blank"&gt;xVal: A validation framework for ASP.NET MVC:&lt;/a&gt; Steve Sanderson writes about his cool &lt;a href="http://xval.codeplex.com/" target="_blank"&gt;xVal validation framework&lt;/a&gt; for ASP.NET MVC.&amp;#160; This enables you to perform both client-side and server-side validation of model objects.&amp;#160; I also highly recommend checking out his &lt;a href="https://www.amazon.com/dp/1430210079?tag=scoblo04-20&amp;amp;camp=0&amp;amp;creative=0&amp;amp;linkCode=as1&amp;amp;creativeASIN=1430210079&amp;amp;adid=02H3PYR0T78V4VESXN65&amp;amp;" target="_blank"&gt;Pro ASP.NET MVC Framework&lt;/a&gt; book – it is absolutely fantastic.&amp;#160; &lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://bradwilson.typepad.com/blog/2009/04/dataannotations-and-aspnet-mvc.html" target="_blank"&gt;DataAnnotations and ASP.NET MVC&lt;/a&gt;: Brad Wilson (a dev on the ASP.NET MVC team) has a nice post that describes how to use DataAnnotations to annotate model objects, and then use a model binder to automatically validate them when accepting form posted input.&amp;#160; DataAnnotation support will be built-in with the next version of ASP.NET MVC.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://blog.maartenballiauw.be/post/2009/05/06/More-ASPNET-MVC-Best-Practices.aspx" target="_blank"&gt;More ASP.NET MVC Best Practices&lt;/a&gt;: Maarten Balliauw has a nice blog post that summarizes some nice ASP.NET MVC best practices.&amp;#160; Also check out his &lt;a href="https://www.amazon.com/dp/184719754X?tag=scoblo04-20&amp;amp;camp=0&amp;amp;creative=0&amp;amp;linkCode=as1&amp;amp;creativeASIN=184719754X&amp;amp;adid=1GFZ4A8CDM6GFYN8J54Y&amp;amp;" target="_blank"&gt;ASP.NET MVC 1.0 Quickly book&lt;/a&gt;.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;h3&gt;&lt;u&gt;Visual Studio&lt;/u&gt;&lt;/h3&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://blogs.msdn.com/webdevelopertips/archive/2009/04/24/tip-56-did-you-know-how-to-update-jscript-intellisense-manually.aspx" target="_blank"&gt;Tip: How to update JavaScript Intellisense&lt;/a&gt;: A useful post that discusses the Ctrl-Shift-J keyboard command in Visual Studio 2008 SP1.&amp;#160; This causes the JavaScript intellisense engine to update intellisense.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://blogs.msdn.com/webdevelopertips/archive/2009/04/28/tip-56-did-you-know-how-to-manage-web-site-configuration-through-a-web-interface.aspx" target="_blank"&gt;Tip: How to manage web site configuration through a web admin tool&lt;/a&gt;: Another useful post that discusses a feature that a lot of ASP.NET developers don’t know about, which is how you can manage your ASP.NET application settings within a web admin tool.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;Hope this helps,&lt;/p&gt;    &lt;p&gt;Scott&lt;/p&gt; &lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7111012" width="1" height="1"&gt;</content><author><name>ScottGu</name><uri>http://weblogs.asp.net/members/ScottGu.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/ASP.NET/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/scottgu/archive/tags/Visual+Studio/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/.NET/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/scottgu/archive/tags/Community+News/default.aspx" /><category term="MVC" scheme="http://weblogs.asp.net/scottgu/archive/tags/MVC/default.aspx" /></entry><entry><title>IIS Search Engine Optimization Toolkit</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/scottgu/archive/2009/06/03/iis-search-engine-optimization-toolkit.aspx" /><id>http://weblogs.asp.net/scottgu/archive/2009/06/03/iis-search-engine-optimization-toolkit.aspx</id><published>2009-06-03T16:53:53Z</published><updated>2009-06-03T16:53:53Z</updated><content type="html">&lt;font size="2" face="arial"&gt;   &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Search_engine_optimization" target="_blank"&gt;SEO&lt;/a&gt; (search engine optimization) is one of the important considerations that any Internet web-site needs to design with in mind.&amp;#160; A non-trivial percentage of Internet traffic to sites is driven by search engines, and good SEO techniques can help increase site traffic even further.&lt;/p&gt;    &lt;p&gt;Likewise, small mistakes can significantly impact the search relevance of your site’s content and cause you to miss out on the traffic that you should be receiving.&amp;#160; Some of these mistakes include: multiple URLs on a site leading to the same content, broken links from a page, poorly chosen titles, descriptions, and keywords, large amounts of viewstate, invalid markup, etc.&amp;#160; These mistakes are often easy to fix - the challenge is how to discover and pinpoint them within a site.&lt;/p&gt;    &lt;h3&gt;&lt;u&gt;Introducing the IIS Search Engine Optimization Toolkit&lt;/u&gt;&lt;/h3&gt;    &lt;p&gt;Today we are shipping the first beta of a new free tool - the IIS Search Engine Optimization Toolkit - that makes it easy to perform SEO analysis on your site and identify and fix issues within it.&lt;/p&gt;    &lt;p&gt;You can install the IIS Search Engine Optimization Toolkit using the &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/06/02/microsoft-web-platform-installer.aspx" target="_blank"&gt;Microsoft Web Platform Installer&lt;/a&gt; I blogged about earlier this week.&amp;#160; You can install it through WebPI using the “install now” link on the &lt;a href="http://www.iis.net/extensions/SEOToolkit" target="_blank"&gt;IIS SEO Toolkit home&lt;/a&gt;.&amp;#160; &lt;/p&gt;    &lt;p&gt;Once installed, you’ll find a new “Search Engine Optimization” section within the IIS 7 admin tool, and several SEO tools available within it:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/seo1.png" /&gt;&lt;/p&gt;    &lt;p&gt;The Robots and SiteMap tools enable you to easily create and manage robots.txt and sitemap.xml files for your site that help guide search engines on what URLs they should and shouldn’t crawl and follow.&lt;/p&gt;    &lt;p&gt;The Site Analysis tool enables you to crawl a site like a search engine would, and then analyze the content using a variety of rules that help identify SEO, Accessibility, and Performance problems within it.&lt;/p&gt;    &lt;h3&gt;&lt;u&gt;Using the IIS SEO Toolkit’s Site Analysis Tool&lt;/u&gt;&lt;/h3&gt;    &lt;p&gt;Let’s take a look at how we can use the Site Analysis tool to quickly review SEO issues with a site.&amp;#160; To avoid embarrassing anyone else by turning the tool loose on their site, I’ve decided to instead use the analysis tool on one of my own sites: &lt;a href="http://www.scottgu.com" target="_blank"&gt;www.scottgu.com&lt;/a&gt;.&amp;#160; This is a site I wrote many years ago (last update in 2005 I think).&amp;#160; If you install the IIS SEO Toolkit you can point it at my site and duplicate the steps below to drill into the SEO analysis of it.&lt;/p&gt;    &lt;p&gt;&lt;u&gt;Open the Site Analysis Tool&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;We’ll begin by launching the IIS Admin Tool (inetmgr) and clicking on the root node in the left-pane tree-view of the IIS7 admin tool (the machine name – in this case “Scottgu-PC”).&amp;#160; We’ll then select the “Site Analysis” icon within the Search Engine Optimization section on the right.&amp;#160; Opening the Site Analysis tool at the machine level like this will allow us to run the analysis tool against any remote server (if we had instead opened it with a site selected then we would only be able to run analysis against local sites on the box).&amp;#160; &lt;/p&gt;    &lt;p&gt;Opening the Site Analysis tool causes the below screen to display – it lists any previously saved site analysis reports that we have created in the past.&amp;#160; Since this is the first time we’ve opened the tool, it is an empty list.&amp;#160; We’ll click the “New Analysis…” action link on the right-hand side of the admin tool to create a new analysis report:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/seo2.png" /&gt;&lt;/p&gt;    &lt;p&gt;Clicking the “New Analysis…” link brings up a dialog like below, which allows us to name the report as well as configure what site we want to crawl and how deep we want to examine it.&amp;#160; &lt;/p&gt;    &lt;p&gt;We’ll name our new report “scottgu.com” and configure it to start with the &lt;a href="http://www.scottgu.com" target="_blank"&gt;http://www.scottgu.com&lt;/a&gt; URL and then crawl up to 10,000 pages within the site (note: if you don’t see a “Start URL” textbox in the dialog it is because you didn’t select the root machine node in the left-hand pane of the admin tool and instead opened it at the site level – cancel out, select the root machine node, and then click the Site Analysis link).&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/seo3.png" /&gt;&lt;/p&gt;    &lt;p&gt;When we click the “Ok” button in the dialog above the Site Analysis tool will request the &lt;a href="http://www.scottgu.com" target="_blank"&gt;http://www.scottgu.com&lt;/a&gt; URL, examine the returned HTML content, and then crawl the site just like a search engine would.&amp;#160; My site has 407 different URLs on it, and it only took 13 seconds for the IIS SEO Toolkit to crawl all of them and perform analysis on the content that was downloaded.&amp;#160; &lt;/p&gt;    &lt;p&gt;Once it is done it will open a report summary view detailing what it found.&amp;#160; Below you can see that it found 721 violations of various kinds within my site (ouch):&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/seo4.png" /&gt;&lt;/p&gt;    &lt;p&gt;We can click on any of the items within the violations summary view to drill into details about them.&amp;#160; We’ll look into a few of them below.&lt;/p&gt;    &lt;p&gt;&lt;u&gt;Looking at the “description is missing” violations&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;You’ll notice above that I have 137 “The description is missing” violations.&amp;#160; Let’s double click on the rule to learn more about it and see details about the individual violations.&amp;#160; Double clicking the description rule above will open up a new query tab that automatically provides a filtered view of just the description violations (note: you can customize the query if you want – and optionally export it into Excel if you want to do even richer data analysis):&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/seo5.png" /&gt;&lt;/p&gt;    &lt;p&gt;Double clicking any of the violations in the list above will open up details about it.&amp;#160; Each violation has details about what exactly the problem is, and recommended action on how to fix it:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/seo6.png" /&gt;&lt;/p&gt;    &lt;p&gt;Notice above that I forgot to add a &amp;lt;meta&amp;gt; description element to my photos page (along with all the other pages too).&amp;#160; Because my photos page just displays images right now, a search engine has no way of knowing what content is on it.&amp;#160; A 25 to 150 character long description would be able to explain that this URL is my photo album of pictures and provide much more context.&amp;#160; &lt;/p&gt;    &lt;p&gt;The “Word Analysis” tab is often useful when coming up with description text.&amp;#160; This tab shows details about the page (its title, keywords, etc) and displays a list of all words used in the HTML within it – as well as how many times they are duplicated.&amp;#160; It also allows you to see all two-word and three-word phrases that are repeated on the page.&amp;#160; It also lists the &amp;lt;a&amp;gt; text used on other page to link to this page – all of which is useful to come up with a description:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/seo7.png" /&gt;&lt;/p&gt;    &lt;p&gt;&lt;u&gt;Looking at the URL is linked using different casing violations&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;Let's now at the “URL is linked using different casing” violations.&amp;#160; We can do this by going back to our summary report page and by then clicking on this specific rule violation:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/seo9.png" /&gt;&lt;/p&gt;    &lt;p&gt;Search engines count the number of pages on the Internet that link to a URL, and use that number as part of the weighting algorithm they use to determine the relevancy of the content the URL exposes.&amp;#160; What this means is that if 1000 pages link to a URL that talks about a topic, search engines will assume the content on that URL has much higher relevance than a URL with the same topic content that only has 10 people linking to it.&lt;/p&gt;    &lt;p&gt;A lot of people don’t realize that search engines are case sensitive, though, and treat differently cased URLs as different actual URLs.&amp;#160; That means that a link to /Photos.aspx and /photos.aspx will often be treated not as one URL by a search engine – but instead as two different URLs.&amp;#160; That means that if half of the incoming links go to /Photos.aspx and the other half go to /photos.aspx, then search engines will not credit the photos page as being as relevant as it actually is (instead it will be half as relevant – since its links are split up amongst the two).&amp;#160; Finding and fixing any place where we use differently cased URLs within our site is therefore really important.&lt;/p&gt;    &lt;p&gt;If we click on the “URL is linked using different casing” violation above we’ll get a listing of all 104 URLs that are being used on the site with multiple capitalization casings:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/seo10.png" /&gt;&lt;/p&gt;    &lt;p&gt;Clicking on any of the URLs will pull up details about that specific violation and the multiple ways it is being cased on the site.&amp;#160; Notice below how it details both of the URLs it found on the site that differ simply by capitalization casing. In this case I am linking to this URL using a querystring parameter named &amp;quot;AlbumId&amp;quot;.&amp;#160; Elsewhere on the site I am also linking to the URL using a querystring parameter named &amp;quot;albumid&amp;quot; (lower-case “a” and “i”).&amp;#160; Search engines will as a result treat these URLs as different, and so I won’t maximize the page ranking for the content:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/seo11.png" /&gt;&lt;/p&gt;    &lt;p&gt;Knowing there is a problem like this in a site is the first step. The second step is typically harder: trying to figure out all the different paths that have to be taken in order for this URL to be used like this.&amp;#160; Often you'll make a fix and assume that fixes everything - only to discover there was another path through the site that you weren't aware of that also causes the casing problem. To help with scenarios like this, you can click the &amp;quot;Actions&amp;quot; dropdown in the top-right of the violations dialog and select the &amp;quot;View Routes to this Page&amp;quot; link within it.&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/seo12.png" /&gt;&lt;/p&gt;    &lt;p&gt;This will pull up a dialog that displays all of the steps the crawler took that led to the particular URL in question being executed. Below it is showing that it found two ways to reach this particular URL:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/seo13.png" /&gt;&lt;/p&gt;    &lt;p&gt;Being able to get details about the exact casing problems, as well as analyze the exact steps followed to reach a particular URL casing, makes it dramatically easier to fix these types of issues.&lt;/p&gt;    &lt;p&gt;&lt;u&gt;Looking at the page contains multiple canonical format violations&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;Fixing the casing issues like we did above is a good first step to improving page counts.&amp;#160; We also want to fix scenarios where the same content can be retrieved using URLs that differ by more than casing.&amp;#160; To do this we’ll return to our summary page and pull up the “page contains multiple canonical format violations” report:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/seo14.png" /&gt;&lt;/p&gt;    &lt;p&gt;Drilling into this report lists all of the URLs on our site that can be accessed in multiple “canonical” ways:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/seo15.png" /&gt;&lt;/p&gt;    &lt;p&gt;Clicking on any of them will pull up details about the issue. Notice below how the analysis tool has detected that sometimes we refer to the home page of the site as &amp;quot;/&amp;quot; and sometimes as &amp;quot;/Default.aspx&amp;quot;. While our web-server will interpret both as executing the same page, search engines will treat them as two separate URLs - which means the search relevancy is not as high as it should be (since the weighting gets split up across two URLs instead of being combined as one).&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/seo16.png" /&gt;&lt;/p&gt;    &lt;p&gt;We can see all of the cases where the /Default.aspx URL is being used by clicking on the “Links” tab above.&amp;#160; This shows all of the pages that link to the /Default.aspx URL, as well as all URLs that it in turn links to:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/seo17.png" /&gt;&lt;/p&gt;    &lt;p&gt;We can switch to see details about where and how the related “/” URL is being used by clicking the “Related URLs” drop-down above – this will show all other URLs that resolve to the same content, and allow us to quickly pull their details up as well:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/seo18.png" /&gt;&lt;/p&gt;    &lt;p&gt;Like we did with the casing violations, we can use the “View Routes to this Page” option to figure out of all the paths within the site that lead to these different URLs and use this to help us hunt down and change them so that we always use a common consistent URL to link to these pages.&amp;#160; &lt;/p&gt;    &lt;p&gt;Note: Fixing the casing and canonicalization issues for all &lt;em&gt;internal links within our site&lt;/em&gt; is a good first step.&amp;#160; &lt;em&gt;External sites&lt;/em&gt; might also be linking to our URLs, though, and those will be harder to all get updated.&amp;#160; One way to fix our search ranking without requiring the externals to update their links is to download and install the IIS URL Rewrite module on our web server (it is available as a free download using the &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/06/02/microsoft-web-platform-installer.aspx" target="_blank"&gt;Microsoft Web Platform Installer&lt;/a&gt;).&amp;#160; We can then configure a URL Rewrite rule that automatically does a permanent redirect to the correct canonical URL – which will cause search engines to treat them as the same (read Carlos’ &lt;a href="http://blogs.msdn.com/carlosag/archive/2008/09/02/IIS7UrlRewriteSEO.aspx" target="_blank"&gt;IIS7 and URL Rewrite: Make your Site SEO&lt;/a&gt; blog post to learn how to do this).&amp;#160; &lt;/p&gt;    &lt;p&gt;&lt;u&gt;Looking up redirect violations&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;As a last step let’s look at some redirect violations on the site:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/seo19.png" /&gt;&lt;/p&gt;    &lt;p&gt;Drilling into this rule category reminded me of something I did a few years ago (when i transferred my blog to a different site) - that I just discovered was apparently pretty dumb.&amp;#160; &lt;/p&gt;    &lt;p&gt;When I first setup the site I had originally had a simple blog page at: &lt;a href="http://www.scottgu.com/blog.aspx"&gt;www.scottgu.com/blog.aspx&lt;/a&gt;&amp;#160; After a few weeks, I decided to move my blog to &lt;a href="http://weblogs.asp.net/scottgu"&gt;weblogs.asp.net/scottgu&lt;/a&gt;.&amp;#160; Rather than go through all my pages and change the link to the new address, I thought I’d be clever and just update the blog.aspx page to do a server-side redirect to the new &lt;a href="http://weblogs.asp.net/scottgu"&gt;weblogs.asp.net/scottgu&lt;/a&gt; URL.&amp;#160; &lt;/p&gt;    &lt;p&gt;This works from an end-user perspective, but what I didn’t realize until I ran the analysis tool today was that search engines are not able to follow the link.&amp;#160; The reason is because my blog.aspx page is doing a server-side redirect to the &lt;a href="http://weblogs.asp.net/scottgu"&gt;weblogs.asp.net/scottgu&lt;/a&gt; URL.&amp;#160; But for SEO reasons of its own, the blog software (Community Server) on &lt;a href="http://weblogs.asp.net"&gt;weblogs.asp.net&lt;/a&gt; is in turn doing a second redirect to fix the incoming &lt;a href="http://weblogs.asp.net/scottgu"&gt;weblogs.asp.net/scottgu&lt;/a&gt; URL to instead be &lt;a href="http://weblogs.asp.net/scottgu/"&gt;http://weblogs.asp.net/scottgu/&lt;/a&gt; (note the trailing slash is being added).&lt;/p&gt;    &lt;p&gt;According to the rule violation in the Site Analysis tool, search engines will give up when you perform two server redirects in a row. It detected that my blog.aspx redirect links to an external link that in turn does another redirect - at which point the search engine crawlers give up: &lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/seo21.png" /&gt;&lt;/p&gt;    &lt;p&gt;I was able to confirm this was the problem without having to open up the server code of the blog.aspx page. All I needed to-do was click the &amp;quot;Headers&amp;quot; tab within the violation dialog and see the redirect HTTP response that the blog.aspx page sent back. Notice it doesn't have a trailing slash (and so causes Community Server to do another redirect when it receives it):&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/seo22.png" /&gt;&lt;/p&gt;    &lt;p&gt;Fixing this issue is easy. I never would have realized I actually had an issue, though, without the Site Analysis tool pointing me to it.&lt;/p&gt;    &lt;h3&gt;&lt;u&gt;Future Automatic Correction Support&lt;/u&gt;&lt;/h3&gt;    &lt;p&gt;There are a bunch of additional violations and content issues that the Site Analysis tool identified when doing its crawl of my web-site.&amp;#160; Identifying and fixing them is straight-forward and very similar to the above steps.&amp;#160; Each issue I fix makes my site cleaner, easier to crawl, and helps it have even higher search relevancy.&amp;#160; This in turn will generate an increase of traffic coming to my site from search engines – which is a very cost effective return on investment.&amp;#160; Once a report is generated and saved, it will show up in the list of previous reports within the IIS admin tool.&amp;#160; You can at any point right-click it and tell the IIS SEO Toolkit to re-run it – allowing you to periodically validate that no regressions have been introduced.&lt;/p&gt;    &lt;p&gt;The preview build of the Site Analysis tool today verifies about 50 rules when it crawls a site.&amp;#160; Over time we’ll add more rules that check for additional issues and scenarios.&amp;#160; In future preview releases you’ll also start to see even more intelligence built-into the SEO Analysis tool that will allow it to also verify on the server-side that you have the URL Rewrite module installed with a good set of SEO-friendly rules configured.&amp;#160; The Site Analysis tool will also allow you to fix certain violations automatically by suggesting rewrite rules that you can add to your site from directly within the site analysis report tool (for example: to fix issues like the “/” and “/Default.aspx” canonicalization issue we looked at before).&amp;#160; This will make it even easier to help enforce good SEO on the site.&amp;#160; Until then, I’d recommend reading these links to learn more about manually configuring URL Rewrite for SEO: &lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a href="http://blogs.msdn.com/carlosag/archive/2008/09/02/IIS7UrlRewriteSEO.aspx" target="_blank"&gt;IIS7 and URL Rewrite: Make your Site SEO&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a href="http://ruslany.net/2009/04/10-url-rewriting-tips-and-tricks/" target="_blank"&gt;10 URL Rewriting Tips and Tricks&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a href="http://www.iis.net/extensions/URLRewrite" target="_blank"&gt;URL Rewrite Module&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a href="http://www.iis.net/extensions/URLRewrite" target="_blank"&gt;URL Rewrite Walkthrough&lt;/a&gt; &lt;/li&gt;   &lt;/ul&gt;    &lt;h3&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/h3&gt;    &lt;p&gt;The IIS Search Engine Optimization Toolkit makes it easy to analyze and assess how search engine friendly your web-site is.&amp;#160; It pinpoints SEO violations, and provides instructions on how to fix them.&amp;#160; You can learn more about the toolkit and how to best take advantage of it from these links:&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a href="http://www.iis.net/extensions/SEOToolkit" target="_blank"&gt;IIS Search Engine Optimization Toolkit Home&lt;/a&gt; (including download link)&lt;/li&gt;      &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/640/using-site-analysis-to-crawl-a-web-site/" target="_blank"&gt;Walkthrough: Using Site Analysis to Crawl a Website&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/641/using-site-analysis-reports/" target="_blank"&gt;Walkthrough: Using Site Analysis Reports&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://blogs.msdn.com/carlosag/archive/2009/07/02/iis-search-engine-optimization-toolkit-beta-1.aspx" target="_blank"&gt;Carlos Aguilar Mares’ IIS Search Engine Optimization Blog Post&lt;/a&gt; (he is the guy who built it!) &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;The IIS Search Engine Optimization Toolkit is free, takes less than a minute to install, and can be run against any existing web-server or web-site.&amp;#160; There is no need to install anything on a remote server to use it – just type in the URL of the site and you’ll get a report back a site analysis report with actionable items that that you can use immediately to improve it. &lt;/p&gt;    &lt;p&gt;Today’s release is a beta release, so please use the &lt;a href="http://forums.iis.net/1162.aspx" target="_blank"&gt;IIS Search Engine Optimization Toolkit Forum&lt;/a&gt; to let us know if you run into any issues or have feature suggestions.&lt;/p&gt;    &lt;p&gt;Hope this helps,&lt;/p&gt;    &lt;p&gt;Scott&amp;#160; &lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt; &lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7107214" width="1" height="1"&gt;</content><author><name>ScottGu</name><uri>http://weblogs.asp.net/members/ScottGu.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/ASP.NET/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/.NET/default.aspx" /><category term="IIS7" scheme="http://weblogs.asp.net/scottgu/archive/tags/IIS7/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/scottgu/archive/tags/Community+News/default.aspx" /></entry><entry><title>Microsoft Web Platform Installer</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/scottgu/archive/2009/06/02/microsoft-web-platform-installer.aspx" /><id>http://weblogs.asp.net/scottgu/archive/2009/06/02/microsoft-web-platform-installer.aspx</id><published>2009-06-02T09:21:43Z</published><updated>2009-06-02T09:21:43Z</updated><content type="html">&lt;font size="2" face="arial"&gt;   &lt;p&gt;One of the cool new releases coming out this year is a small download manager - the Microsoft Web Platform Installer - that makes installing and configuring web server and web development stacks really easy.&amp;#160; It is a free tool that you can download from the &lt;a href="http://www.microsoft.com/web" target="_blank"&gt;www.microsoft.com/web&lt;/a&gt; site (here is the &lt;a href="http://www.microsoft.com/web/downloads/platform.aspx" target="_blank"&gt;direct link to the installer&lt;/a&gt; – choose the 2.0 version).&amp;#160; It works with Windows XP, Vista, Windows 7, Windows Server 2003 and Windows Server 2008.&lt;/p&gt;    &lt;p&gt;The Web Platform Installer provides an easy way to quickly install and customize all the software you need to develop or deploy web sites and applications on a Windows machine.&amp;#160; The tool automatically analyses what your system currently has installed, allows you to easily mark additional components to be added, and then automates installing them all at once when you click the install button (saving you from having to manually install each one yourself).&amp;#160; &lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/webpi2.PNG" /&gt;&lt;/p&gt;    &lt;p&gt;For example, you can click the “Web Server” section above to customize the individual IIS web server modules installed on the box.&amp;#160; This includes both the built-in IIS modules that ship with Windows (like the directory browsing module), as well as additional modules available as separate downloads.&amp;#160; Below I’ve selected two additional modules – the Application Request Routing and URL Rewrite modules – to be installed:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/webpi3.PNG" /&gt;&lt;/p&gt;    &lt;p&gt;The URL Rewrite module is a free Microsoft module that enables you to publish custom URLs from your sites and optimize them for search engine optimization (SEO).&amp;#160; You can enforce SEO rules (consistent casing, embedded keywords, etc) and customize how your site looks from an external perspective however you want (the admin tool will even help guide you to write the regular expression rules):&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/webpi4.PNG" /&gt;&lt;/p&gt;    &lt;p&gt;The Application Request Routing is a free Microsoft module that supports forward-proxy style scenarios, and enables dynamic load-balancing of requests across multiple web-server machines (allowing you to scale out, move machines behind DMZ firewall scenarios, and bring machines in and out of a farm for maintenance without disruption).&amp;#160; &lt;/p&gt;    &lt;p&gt;In addition to URL Rewrite and Application Request Routing, there are dozens of other web server modules you can select that enable WebDAV, Secure FTP, automated deployment, remote database management through the IIS admin tool for hosted scenarios, media server streaming scenarios, and more.&amp;#160; You can also install framework additions like ASP.NET MVC, .NET 3.5 SP1, SQL Express and associated SQL administration tools, Visual Web Developer 2008 Express, and more.&lt;/p&gt;    &lt;h3&gt;&lt;u&gt;Windows Web Application Gallery&lt;/u&gt;&lt;/h3&gt;    &lt;p&gt;The web platform installer also integrates with the new Windows Web Application Gallery now online: &lt;a title="http://www.microsoft.com/web/gallery" href="http://www.microsoft.com/web/gallery" target="_blank"&gt;www.microsoft.com/web/gallery&lt;/a&gt;&amp;#160; &lt;/p&gt;    &lt;p&gt;This gallery allows you to easily install existing web applications onto your server.&amp;#160; The gallery contains a variety of popular .NET open source applications (like DotNetNuke, ScrewTurn Wiki and Umbraco CMS) as well as PHP open source applications (including WordPress and Drupal).&amp;#160; You can easily browse and install them using the Web Platform Installer as well (just click the “Web Applications” tab and check the applications you want to install):&lt;/p&gt;    &lt;p&gt;&lt;img src="http://scottguimages.s3.amazonaws.com/webpi5.PNG" /&gt;;&lt;/p&gt;    &lt;p&gt;In addition to downloading the application, the web platform installer will create a new site/application root and configure the appropriate site settings and optionally install the database.&lt;/p&gt;    &lt;h3&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/h3&gt;    &lt;p&gt;If you haven’t downloaded the Web Platform Installer yet I’d recommend taking a look at it.&amp;#160; I think you’ll find it makes it much easier to configure and get a box up and running, and makes it much easier to find and install the various components of the Windows web server stack, as well as find and install applications to use on top of it.&amp;#160; Overtime you’ll see us ship more and more functionality this way.&amp;#160; &lt;/p&gt;    &lt;p&gt;You can &lt;a href="http://www.microsoft.com/web/downloads/platform.aspx" target="_blank"&gt;download&lt;/a&gt; and start using the Web Platform Installer 2.0 Beta today.&amp;#160; We’ll ship the final release of it this summer.&lt;/p&gt;    &lt;p&gt;Hope this helps,&lt;/p&gt;    &lt;p&gt;Scott&lt;/p&gt; &lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7105781" width="1" height="1"&gt;</content><author><name>ScottGu</name><uri>http://weblogs.asp.net/members/ScottGu.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/ASP.NET/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/.NET/default.aspx" /><category term="IIS7" scheme="http://weblogs.asp.net/scottgu/archive/tags/IIS7/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/scottgu/archive/tags/Community+News/default.aspx" /></entry><entry><title>May 30th Links: ASP.NET, AJAX, ASP.NET MVC, Visual Studio</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/scottgu/archive/2009/05/30/may-30th-links-asp-net-ajax-asp-net-mvc-visual-studio.aspx" /><id>http://weblogs.asp.net/scottgu/archive/2009/05/30/may-30th-links-asp-net-ajax-asp-net-mvc-visual-studio.aspx</id><published>2009-05-30T22:39:00Z</published><updated>2009-05-30T22:39:00Z</updated><content type="html">&lt;font size="2" face="arial"&gt;   &lt;p&gt;Here is the latest in my &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/12/02/dec-2nd-links-asp-net-asp-net-dynamic-data-asp-net-ajax-asp-net-mvc-visual-studio-silverlight-wpf.aspx" mce_href="http://weblogs.asp.net/scottgu/archive/2008/12/02/dec-2nd-links-asp-net-asp-net-dynamic-data-asp-net-ajax-asp-net-mvc-visual-studio-silverlight-wpf.aspx" target="_blank"&gt;link-listing series&lt;/a&gt;.&amp;nbsp; Also check out my &lt;a href="http://weblogs.asp.net/scottgu/pages/ASP.NET-2.0-Tips_2C00_-Tricks_2C00_-Recipes-and-Gotchas.aspx" mce_href="http://weblogs.asp.net/scottgu/pages/ASP.NET-2.0-Tips_2C00_-Tricks_2C00_-Recipes-and-Gotchas.aspx" target="_blank"&gt;ASP.NET Tips, Tricks and Tutorials page&lt;/a&gt; and &lt;a href="http://weblogs.asp.net/scottgu/pages/silverlight-posts.aspx" mce_href="http://weblogs.asp.net/scottgu/pages/silverlight-posts.aspx" target="_blank"&gt;Silverlight Tutorials page&lt;/a&gt; for links to popular articles I've done myself in the past.&amp;nbsp; &lt;/p&gt;    &lt;p&gt;You can also now follow me on twitter (&lt;a href="http://twitter.com/scottgu" mce_href="http://twitter.com/scottgu" target="_blank"&gt;@scottgu&lt;/a&gt;) where I also post links and small posts.&lt;/p&gt;    &lt;h3&gt;&lt;u&gt;ASP.NET&lt;/u&gt;&lt;/h3&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://aspnet.4guysfromrolla.com/articles/052709-1.aspx" mce_href="http://aspnet.4guysfromrolla.com/articles/052709-1.aspx" target="_blank"&gt;Using ASP.NET 3.5’s ListView and DataPager Controls to Delete Data&lt;/a&gt;: Scott Mitchell continues his excellent tutorial series on the ASP.NET ListView control. In this article he discusses how to handle deleting data with it.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://geekswithblogs.net/QuandaryPhase/archive/2009/02/13/asp.net-listview-displaying-hierarchical-data.aspx" mce_href="http://geekswithblogs.net/QuandaryPhase/archive/2009/02/13/asp.net-listview-displaying-hierarchical-data.aspx" target="_blank"&gt;ASP.NET ListView: Displaying Hierarchical Data&lt;/a&gt;: Adam Pooler writes about how to use the ASP.NET ListView control to display hierarchical data within a web page.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx" mce_href="http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx" target="_blank"&gt;ELMAH: Error Logging Module and Handlers for ASP.NET&lt;/a&gt;: ELMAH is a really cool open source error logging module for ASP.NET that can help you figure out what is going wrong with a site in production (and it enables you to diagnose things remotely in a browser).&amp;nbsp; This post from Scott Hanselman nicely summarizes some of the things you can do with it.&amp;nbsp; &lt;a href="http://code.google.com/p/elmah/" mce_href="http://code.google.com/p/elmah/" target="_blank"&gt;Visit the ELMAH home page&lt;/a&gt; to learn more and download it.&amp;nbsp; &lt;a href="http://code.google.com/p/elmah/wiki/MVC" mce_href="http://code.google.com/p/elmah/wiki/MVC" target="_blank"&gt;Using ELMAH with ASP.NET MVC&lt;/a&gt; describes how to use it within ASP.NET MVC applications.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://www.4guysfromrolla.com/articles/052009-1.aspx" mce_href="http://www.4guysfromrolla.com/articles/052009-1.aspx" target="_blank"&gt;Examining ASP.NET 2.0’s Membership, Roles and Profile API Part 14&lt;/a&gt;: Scott Mitchell continues his excellent series on ASP.NET’s security features with an article that discusses how to create a page that permits users to update their security question and answer settings to reset passwords.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://www.devexpertise.com/2009/03/25/aspnet-tiptrick-use-a-base-page-class-for-all-application-pages/" mce_href="http://www.devexpertise.com/2009/03/25/aspnet-tiptrick-use-a-base-page-class-for-all-application-pages/" target="_blank"&gt;ASP.NET Tip/Trick: Use a Base Page Class for All Application Pages&lt;/a&gt;: A nice article that discusses a good best practice with ASP.NET applications – which is to create a helper base class that encapsulates common functionality that you can use across pages within your applications.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;h3&gt;&lt;u&gt;AJAX&lt;/u&gt;&lt;/h3&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a href="http://weblogs.asp.net/bleroy/archive/2009/05/13/new-release-of-the-ajax-control-toolkit.aspx" target="_blank"&gt;New Release of ASP.NET AJAX Control Toolkit&lt;/a&gt;: A new release of the ASP.NET AJAX Control Toolkit is now available for download (&lt;a href="http://weblogs.asp.net/bleroy/archive/2009/05/13/new-release-of-the-ajax-control-toolkit.aspx" mce_href="http://weblogs.asp.net/bleroy/archive/2009/05/13/new-release-of-the-ajax-control-toolkit.aspx" target="_blank"&gt;this article&lt;/a&gt; by Bertrand Le Roy has more details).&amp;nbsp; This new release contains bug fixes as well as three new controls: HtmlEditor, ComboBox and ColorPicker.&amp;nbsp; Watch the new &lt;a href="http://www.asp.net/learn/ajax-videos/" mce_href="http://www.asp.net/learn/ajax-videos/" target="_blank"&gt;Videos&lt;/a&gt; and new &lt;a href="http://www.asp.net/learn/ajax/" mce_href="http://www.asp.net/learn/ajax/" target="_blank"&gt;Tutorials&lt;/a&gt; to learn more about the controls on the &lt;a href="http://www.asp.net/ajax/" mce_href="http://www.asp.net/ajax/" target="_blank"&gt;www.asp.net/ajax&lt;/a&gt; web-site. &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://professionalaspnet.com/archive/2009/05/24/Setting-the-Default-Input-Focus-and-Default-Button-_3A00_-Thin-ASP.NET-5.aspx" mce_href="http://professionalaspnet.com/archive/2009/05/24/Setting-the-Default-Input-Focus-and-Default-Button-_3A00_-Thin-ASP.NET-5.aspx" target="_blank"&gt;Setting the Default Input Focus and Default Button with jQuery&lt;/a&gt;: Chris Love has an nice post on how to improve the user experience of a page by setting the default focus and default button of a web form control using jQuery.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://encosia.com/2009/05/20/automatically-minify-and-combine-javascript-in-visual-studio/" mce_href="http://encosia.com/2009/05/20/automatically-minify-and-combine-javascript-in-visual-studio/" target="_blank"&gt;Automatically Minify and Combine JavaScript in Visual Studio&lt;/a&gt;: Dave Ward has a great article that describes how you can add a build command to Visual Studio that enables you to automatically compress and combine client-side JavaScript files.&amp;nbsp; This makes your pages load faster on the client and improves the perceived performance of your sites.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://encosia.com/2009/04/07/using-complex-types-to-make-calling-services-less-complex/" mce_href="http://encosia.com/2009/04/07/using-complex-types-to-make-calling-services-less-complex/" target="_blank"&gt;Using Complex Types to Make Calling Services less…Complex&lt;/a&gt;: Dave Ward has a great post that discusses strategies on how to pass complex types to the server from client-side JavaScript.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://www.pluralsight.com/main/whitepapers/ClientDataBindingAjax4.aspx" mce_href="http://www.pluralsight.com/main/whitepapers/ClientDataBindingAjax4.aspx" target="_blank"&gt;Client-side Data Binding in ASP.NET AJAX 4.0&lt;/a&gt;: Fritz Onion has a great article about the new client-side templating features of ASP.NET AJAX 4.0 (which you can download and use today in .NET 3.5 projects).&amp;nbsp; This enables powerful client data-binding scenarios against JSON based data.&amp;nbsp; Also check out &lt;a href="http://politian.wordpress.com/" mce_href="http://politian.wordpress.com/" target="_blank"&gt;Politian’s Blog&lt;/a&gt; to find some great tutorials on how to use it.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;h3&gt;&lt;u&gt;ASP.NET MVC&lt;/u&gt;&lt;/h3&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://flux88.com/blog/jquery-auto-complete-text-box-with-asp-net-mvc/" mce_href="http://flux88.com/blog/jquery-auto-complete-text-box-with-asp-net-mvc/" target="_blank"&gt;jQuery Auto-Complete Text Box with ASP.NET MVC&lt;/a&gt;: Ben Scheirman has a really nice tutorial (taken from his upcoming &lt;a href="http://manning.com/palermo/" mce_href="http://manning.com/palermo/" target="_blank"&gt;ASP.NET MVC in Action book&lt;/a&gt;) that describes how to implement an auto-complete textbox using jQuery and ASP.NET MVC.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://haacked.com/archive/2009/04/14/using-jquery-grid-with-asp.net-mvc.aspx" mce_href="http://haacked.com/archive/2009/04/14/using-jquery-grid-with-asp.net-mvc.aspx" target="_blank"&gt;Using the jQuery Grid with ASP.NET MVC&lt;/a&gt;: Phil Haack has a nice post that describes how to use the jQuery Grid plugin with ASP.NET MVC to build an AJAX-enabled DataGrid. &lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://helios.ca/2009/05/04/aspnet-mvc-forms-authentication-with-active-directory/" mce_href="http://helios.ca/2009/05/04/aspnet-mvc-forms-authentication-with-active-directory/" target="_blank"&gt;ASP.NET MVC Forms Authentication with Active Directory&lt;/a&gt;: Mike has a nice post that shows how to setup an ASP.NET MVC application with Forms Authentication that uses Active Directory as the username/password credential store instead of a database.&amp;nbsp; Also check out his post on &lt;a href="http://helios.ca/2009/04/22/aspnet-mvc-sqlmembershipprovider/" mce_href="http://helios.ca/2009/04/22/aspnet-mvc-sqlmembershipprovider/" target="_blank"&gt;ASP.NET MVC Forms Authentication with SQL Membership&lt;/a&gt; to learn more about how to setup forms authentication using a SQL Server database (instead of the default SQL Express one).&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://blogs.msdn.com/webdevtools/archive/2009/04/28/updated-nunit-templates-for-asp-net-mvc-1-0-rtm.aspx" mce_href="http://blogs.msdn.com/webdevtools/archive/2009/04/28/updated-nunit-templates-for-asp-net-mvc-1-0-rtm.aspx" target="_blank"&gt;Visual Studio NUnit Templates for ASP.NET MVC&lt;/a&gt;: The VS Web Tools team has released updated NUnit templates that work with ASP.NET MVC 1.0.&amp;nbsp; This enables you to automatically create a test project that uses NUnit instead of MSTest when you do a File-&amp;gt;New Project and select the ASP.NET MVC 1.0 Project item.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://codeclimber.net.nz/archive/2009/04/08/13-asp.net-mvc-extensibility-points-you-have-to-know.aspx" mce_href="http://codeclimber.net.nz/archive/2009/04/08/13-asp.net-mvc-extensibility-points-you-have-to-know.aspx" target="_blank"&gt;13 ASP.NET MVC Extensibility Points You Have to Know&lt;/a&gt;: Simone Chiaretta has a post that nicely summarizes 13 extensibility points in ASP.NET MVC and how you can use them to customize your applications.&amp;nbsp; Also check out the &lt;a href="http://codeclimber.net.nz/archive/2009/04/29/free-chapter-of-beginning-asp.net-mvc-1.0-ndash-testing-asp.net.aspx" mce_href="http://codeclimber.net.nz/archive/2009/04/29/free-chapter-of-beginning-asp.net-mvc-1.0-ndash-testing-asp.net.aspx" target="_blank"&gt;free chapter of his new ASP.NET MVC book&lt;/a&gt;.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://nayyeri.net/blog/custom-route-constraint-in-asp-net-mvc/" mce_href="http://nayyeri.net/blog/custom-route-constraint-in-asp-net-mvc/" target="_blank"&gt;Custom Route Constraints in ASP.NET MVC&lt;/a&gt;: Keyvan Nayyeriu has a nice post that discusses how to create a custom route constraint in ASP.NET MVC (one of the extensibility points in Simone’s list above).&amp;nbsp; You can use these to control whether a route rule is used or not, and they can enable some pretty rich routing scenarios.&amp;nbsp; Note that in addition to creating route constraint classes, ASP.NET MVC also supports using Regular Expressions and HTTP Method filters to constrain routes as well. Keyvan is the co-author with Simone of the &lt;a href="http://nayyeri.net/blog/beginning-asp-net-mvc-1-0-sample-chapter-available/" mce_href="http://nayyeri.net/blog/beginning-asp-net-mvc-1-0-sample-chapter-available/" target="_blank"&gt;Beginning ASP.NET MVC Book (free chapter available)&lt;/a&gt;.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;h3&gt;&lt;u&gt;Visual Studio&lt;/u&gt;&lt;/h3&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://blogs.msdn.com/webdevelopertips/archive/2009/05/29/tip-66-did-you-know-how-to-insert-quotes-values-automatically-while-typing-the-attrib-values.aspx" mce_href="http://blogs.msdn.com/webdevelopertips/archive/2009/05/29/tip-66-did-you-know-how-to-insert-quotes-values-automatically-while-typing-the-attrib-values.aspx" target="_blank"&gt;Tip: How to insert quotes automatically while typing attributes in the Visual Studio HTML editor&lt;/a&gt;: A useful tip that demonstrates how to configure Visual Studio and Visual Web Developer express to automatically add quotes around attributes when in the HTML source editor.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;Hope this helps,&lt;/p&gt;    &lt;p&gt;Scott&lt;/p&gt; &lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7103053" width="1" height="1"&gt;</content><author><name>ScottGu</name><uri>http://weblogs.asp.net/members/ScottGu.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/ASP.NET/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/scottgu/archive/tags/Visual+Studio/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/.NET/default.aspx" /><category term="Atlas" scheme="http://weblogs.asp.net/scottgu/archive/tags/Atlas/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/scottgu/archive/tags/Community+News/default.aspx" /><category term="MVC" scheme="http://weblogs.asp.net/scottgu/archive/tags/MVC/default.aspx" /></entry><entry><title>LIDNUG: Free Online Virtual Chat with Me Today</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/scottgu/archive/2009/05/27/lidnug-free-online-virtual-chat-with-me-today.aspx" /><id>http://weblogs.asp.net/scottgu/archive/2009/05/27/lidnug-free-online-virtual-chat-with-me-today.aspx</id><published>2009-05-27T08:47:07Z</published><updated>2009-05-27T08:47:07Z</updated><content type="html">&lt;font size="2" face="arial"&gt;   &lt;p&gt;LIDNUG (Linked .NET Users Group) is hosting an online chat with me today (Wednesday) from 11:30am to 1pm PST (Pacific Standard Time).&amp;#160; Anyone is free to join and the agenda topic will be open – so bring your questions!&lt;/p&gt;    &lt;p&gt;&lt;a href="http://events.linkedin.com/LIDNUG-ScottGu-talks-shop-developers/pub/60571" target="_blank"&gt;Click here&lt;/a&gt; to learn more about how to register and attend it.&lt;/p&gt;    &lt;p&gt;Hope to chat with you more then,&lt;/p&gt;    &lt;p&gt;Scott&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;May 30th Update:&lt;/strong&gt; If you missed the chat you can watch it online: &lt;a href="http://www.lidnug.org/"&gt;http://www.lidnug.org/&lt;/a&gt;&lt;/p&gt; &lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7098582" width="1" height="1"&gt;</content><author><name>ScottGu</name><uri>http://weblogs.asp.net/members/ScottGu.aspx</uri></author></entry><entry><title>Free ASP.NET MVC “NerdDinner” Tutorial Now in HTML</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/scottgu/archive/2009/04/28/free-asp-net-mvc-nerddinner-tutorial-now-in-html.aspx" /><id>http://weblogs.asp.net/scottgu/archive/2009/04/28/free-asp-net-mvc-nerddinner-tutorial-now-in-html.aspx</id><published>2009-04-28T07:44:06Z</published><updated>2009-04-28T07:44:06Z</updated><content type="html">&lt;font size="2" face="arial"&gt;&lt;a href="http://www.amazon.com/gp/product/0470384611?ie=UTF8&amp;amp;tag=scoblo04-20&amp;amp;linkCode=xm2&amp;amp;camp=1789&amp;amp;creativeASIN=0470384611" target="_blank"&gt;&lt;img style="margin: 0px 0px 0px 20px; display: inline" align="right" src="http://weblogs.asp.net/blogs/scottgu/bookcover1_6CAECF94.png" /&gt;&lt;/a&gt;     &lt;p&gt;Last month &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/03/10/free-asp-net-mvc-ebook-tutorial.aspx" target="_blank"&gt;I blogged&lt;/a&gt; about a free end-to-end ASP.NET MVC tutorial called “NerdDinner” that I wrote for the &lt;a href="http://www.amazon.com/gp/product/0470384611?ie=UTF8&amp;amp;tag=scoblo04-20&amp;amp;linkCode=xm2&amp;amp;camp=1789&amp;amp;creativeASIN=0470384611" target="_blank"&gt;Professional ASP.NET MVC 1.0&lt;/a&gt; book from Wrox Press.&amp;#160; The book is now released and shipping on &lt;a href="http://www.amazon.com/gp/product/0470384611?ie=UTF8&amp;amp;tag=scoblo04-20&amp;amp;linkCode=xm2&amp;amp;camp=1789&amp;amp;creativeASIN=0470384611" target="_blank"&gt;Amazon&lt;/a&gt;.&amp;#160; &lt;/p&gt;    &lt;p&gt;The NerdDinner tutorial walks through how to build a small, but complete, application using ASP.NET MVC, and introduces some of the core concepts behind it.&amp;#160; You can download a PDF version of the tutorial &lt;a href="http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf" target="_blank"&gt;here&lt;/a&gt;. &lt;/p&gt;    &lt;p&gt;&lt;strong&gt;NerdDinner Tutorial Now Also Available in HTML&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;A few minutes ago I finished publishing an &lt;a href="http://nerddinnerbook.s3.amazonaws.com/Intro.htm" target="_blank"&gt;HTML version of the NerdDinner tutorial&lt;/a&gt; as well.&amp;#160; You can read it online for free &lt;a href="http://nerddinnerbook.s3.amazonaws.com/Intro.htm" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;I split the tutorial up across 12 segments to make it more manageable to read.&amp;#160; I also increased the sizes of the screenshots, and used a really &lt;a href="http://code.google.com/p/syntaxhighlighter/" target="_blank"&gt;nifty syntax highlighter&lt;/a&gt; that &lt;a href="http://www.hanselman.com/blog/" target="_blank"&gt;Scott Hanselman&lt;/a&gt; helped set me up with.&amp;#160; I actually find the end result a lot easier to read than the PDF version. &lt;/p&gt;    &lt;p&gt;Below are links to the different NerdDinner tutorial segments:&lt;/p&gt;    &lt;ul&gt;     &lt;li style="padding-bottom: 2px; padding-left: 2px; padding-right: 2px; padding-top: 2px"&gt;&lt;a href="http://nerddinnerbook.s3.amazonaws.com/Intro.htm"&gt;Introducing the NerdDinner Tutorial&lt;/a&gt;&amp;#160; &lt;/li&gt;      &lt;li style="padding-bottom: 2px; padding-left: 2px; padding-right: 2px; padding-top: 2px"&gt;&lt;a href="http://nerddinnerbook.s3.amazonaws.com/Part1.htm"&gt;How to create a new ASP.NET MVC Project&lt;/a&gt; &lt;/li&gt;      &lt;li style="padding-bottom: 2px; padding-left: 2px; padding-right: 2px; padding-top: 2px"&gt;&lt;a href="http://nerddinnerbook.s3.amazonaws.com/Part2.htm"&gt;How to create a database&lt;/a&gt; &lt;/li&gt;      &lt;li style="padding-bottom: 2px; padding-left: 2px; padding-right: 2px; padding-top: 2px"&gt;&lt;a href="http://nerddinnerbook.s3.amazonaws.com/Part3.htm"&gt;How to build a model with business rule validations&lt;/a&gt; &lt;/li&gt;      &lt;li style="padding-bottom: 2px; padding-left: 2px; padding-right: 2px; padding-top: 2px"&gt;&lt;a href="http://nerddinnerbook.s3.amazonaws.com/Part4.htm"&gt;How to use controllers and views to implement a listing/details UI&lt;/a&gt; &lt;/li&gt;      &lt;li style="padding-bottom: 2px; padding-left: 2px; padding-right: 2px; padding-top: 2px"&gt;&lt;a href="http://nerddinnerbook.s3.amazonaws.com/Part5.htm"&gt;How to provide CRUD (create, read, update, delete) data form entry support&lt;/a&gt; &lt;/li&gt;      &lt;li style="padding-bottom: 2px; padding-left: 2px; padding-right: 2px; padding-top: 2px"&gt;&lt;a href="http://nerddinnerbook.s3.amazonaws.com/Part6.htm"&gt;How to use ViewData and implement ViewModel classes&lt;/a&gt; &lt;/li&gt;      &lt;li style="padding-bottom: 2px; padding-left: 2px; padding-right: 2px; padding-top: 2px"&gt;&lt;a href="http://nerddinnerbook.s3.amazonaws.com/Part7.htm"&gt;How to re-use UI using master pages and partials&lt;/a&gt; &lt;/li&gt;      &lt;li style="padding-bottom: 2px; padding-left: 2px; padding-right: 2px; padding-top: 2px"&gt;&lt;a href="http://nerddinnerbook.s3.amazonaws.com/Part8.htm"&gt;How to implement efficient data paging&lt;/a&gt; &lt;/li&gt;      &lt;li style="padding-bottom: 2px; padding-left: 2px; padding-right: 2px; padding-top: 2px"&gt;&lt;a href="http://nerddinnerbook.s3.amazonaws.com/Part9.htm"&gt;How to secure applications using authentication and authorization&lt;/a&gt; &lt;/li&gt;      &lt;li style="padding-bottom: 2px; padding-left: 2px; padding-right: 2px; padding-top: 2px"&gt;&lt;a href="http://nerddinnerbook.s3.amazonaws.com/Part10.htm"&gt;How to use AJAX to deliver dynamic updates&lt;/a&gt; &lt;/li&gt;      &lt;li style="padding-bottom: 2px; padding-left: 2px; padding-right: 2px; padding-top: 2px"&gt;&lt;a href="http://nerddinnerbook.s3.amazonaws.com/Part11.htm"&gt;How to use AJAX to implement mapping scenarios&lt;/a&gt; &lt;/li&gt;      &lt;li style="padding-bottom: 2px; padding-left: 2px; padding-right: 2px; padding-top: 2px"&gt;&lt;a href="http://nerddinnerbook.s3.amazonaws.com/Part12.htm"&gt;How to enable automated unit testing&lt;/a&gt; &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;Hope this helps,&lt;/p&gt;    &lt;p&gt;Scott&lt;/p&gt; &lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7063144" width="1" height="1"&gt;</content><author><name>ScottGu</name><uri>http://weblogs.asp.net/members/ScottGu.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/ASP.NET/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/.NET/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/scottgu/archive/tags/Community+News/default.aspx" /><category term="MVC" scheme="http://weblogs.asp.net/scottgu/archive/tags/MVC/default.aspx" /></entry><entry><title>ASP.NET MVC 1.0</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/scottgu/archive/2009/04/01/asp-net-mvc-1-0.aspx" /><id>http://weblogs.asp.net/scottgu/archive/2009/04/01/asp-net-mvc-1-0.aspx</id><published>2009-04-02T01:53:23Z</published><updated>2009-04-02T01:53:23Z</updated><content type="html">&lt;font size="2" face="arial"&gt;   &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/scottgu/mvcsource1_7F7BFE6E.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 5px; display: inline; border-top: 0px; border-right: 0px" title="mvcsource[1]" border="0" alt="mvcsource[1]" align="right" src="http://weblogs.asp.net/blogs/scottgu/mvcsource1_thumb_37BA7587.png" width="275" height="402" /&gt;&lt;/a&gt; Two weeks ago &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/03/31/mix-09.aspx" target="_blank"&gt;at MIX&lt;/a&gt; we released ASP.NET MVC 1.0.&amp;#160; ASP.NET MVC is a free, fully supported, Microsoft product that enables developers to easily build web applications using a model-view-controller pattern.&amp;#160; ASP.NET MVC provides a “closer to the metal” web programming option for ASP.NET.&amp;#160; It enables full control over HTML markup and URL structure, and facilitates unit testing and a test driven development workflow.&lt;/p&gt;    &lt;h4&gt;&lt;u&gt;Releasing the ASP.NET MVC source code under MS-PL&lt;/u&gt;&lt;/h4&gt;    &lt;p&gt;I’m excited today to announce that we are also releasing the ASP.NET MVC source code under the Microsoft Public License (MS-PL).&amp;#160; MS-PL is an &lt;a href="http://www.opensource.org/licenses/ms-pl.html" target="_blank"&gt;OSI-approved open source license&lt;/a&gt;.&amp;#160; The MS-PL contains no platform restrictions and provides broad rights to modify and redistribute the source code.&amp;#160; You can read the text of the MS-PL at: &lt;a title="http://www.opensource.org/licenses/ms-pl.html" href="http://www.opensource.org/licenses/ms-pl.html" target="_blank"&gt;http://www.opensource.org/licenses/ms-pl.html&lt;/a&gt;&lt;/p&gt;    &lt;h4&gt;&lt;u&gt;Learning more about ASP.NET MVC&lt;/u&gt;&lt;/h4&gt;    &lt;p&gt;To learn more about ASP.NET MVC, you can read my free &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/03/10/free-asp-net-mvc-ebook-tutorial.aspx" target="_blank"&gt;ASP.NET MVC PDF tutorial&lt;/a&gt; that covers building an end-to-end application (starting literally with File-&amp;gt;New Project).&lt;/p&gt;    &lt;p&gt;There were a number of great ASP.NET MVC talks at MIX this year.&amp;#160; Below are links to several of them:&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/T49F" target="_blank"&gt;File|New –&amp;gt; Company: Creating NerdDinner.com with ASP.NET MVC&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/T50F" target="_blank"&gt;ASP.NET MVC: Overview&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/T44F" target="_blank"&gt;ASP.NET MVC: Ninja Black Belt Tips&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a href="http://www.hanselman.com/blog/MixMobileWebSitesWithASPNETMVCAndTheMobileBrowserDefinitionFile.aspx" target="_blank"&gt;Mobile Web Sites with ASP.NET MVC&lt;/a&gt; &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;There are also several great ASP.NET MVC tutorials at &lt;a href="http://www.asp.net/mvc" target="_blank"&gt;http://www.asp.net/mvc&lt;/a&gt;.&amp;#160; You can also read the &lt;a href="http://msdn.microsoft.com/en-us/library/dd394709.aspx" target="_blank"&gt;ASP.NET MVC MSDN Documentation&lt;/a&gt;.&lt;/p&gt;    &lt;h4&gt;&lt;u&gt;Download ASP.NET MVC&lt;/u&gt;&lt;/h4&gt;    &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b&amp;amp;displaylang=en" target="_blank"&gt;Click here&lt;/a&gt; to download and install ASP.NET MVC 1.0.&amp;#160; You can also install it using the new &lt;a href="http://www.microsoft.com/web/" target="_blank"&gt;Microsoft Web Platform Installer V2&lt;/a&gt; – which provides an integrated setup experience for the entire Microsoft web stack.&lt;/p&gt;    &lt;p&gt;The ASP.NET MVC 1.0 source code is now available.&amp;#160; Scroll down to the bottom of the ASP.NET MVC &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b&amp;amp;displaylang=en" target="_blank"&gt;download page&lt;/a&gt; and you’ll find links to both the ASP.NET MVC 1.0 integrated MSI setup, as well as a .zip file that contains the ASP.NET MVC source code.&amp;#160; The ASP.NET MVC source code includes a VS 2008 project file that enables you to build it.&lt;/p&gt;    &lt;p&gt;Hope this helps,&lt;/p&gt;    &lt;p&gt;Scott&lt;/p&gt; &lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7021883" width="1" height="1"&gt;</content><author><name>ScottGu</name><uri>http://weblogs.asp.net/members/ScottGu.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/ASP.NET/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/scottgu/archive/tags/Visual+Studio/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/.NET/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/scottgu/archive/tags/Community+News/default.aspx" /><category term="MVC" scheme="http://weblogs.asp.net/scottgu/archive/tags/MVC/default.aspx" /></entry><entry><title>MIX 09</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/scottgu/archive/2009/03/31/mix-09.aspx" /><id>http://weblogs.asp.net/scottgu/archive/2009/03/31/mix-09.aspx</id><published>2009-04-01T06:37:29Z</published><updated>2009-04-01T06:37:29Z</updated><content type="html">&lt;font size="2" face="arial"&gt;   &lt;p&gt;Two weeks ago we held our &lt;a href="http://visitmix.com/" target="_blank"&gt;MIX conference&lt;/a&gt; in Las Vegas.&amp;#160; MIX is my favorite conference of the year – since it nicely integrates development and design topics together in a single event, and is usually accompanied by some pretty cool product announcements.&lt;/p&gt;    &lt;p&gt;I gave a first day MIX keynote again this year, and in it I talked about and announced a bunch of new Microsoft web development products.&amp;#160; These included:&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a href="http://www.asp.net/mvc/" target="_blank"&gt;ASP.NET MVC 1.0&lt;/a&gt; (we shipped the final V1 release during MIX) &lt;/li&gt;      &lt;li&gt;&lt;a href="http://blogs.msdn.com/xweb/archive/2009/03/18/Microsoft-Expression-Web-SuperPreview-for-Windows-Internet-Explorer.aspx" target="_blank"&gt;Expression Web 3.0&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a href="http://www.microsoft.com/web/" target="_blank"&gt;Microsoft Web Platform Installer&lt;/a&gt; and &lt;a href="http://www.microsoft.com/web/gallery/default.aspx" target="_blank"&gt;Windows Web App Gallery&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a href="http://silverlight.net/getstarted/silverlight3/default.aspx" target="_blank"&gt;Silverlight 3&lt;/a&gt;&amp;#160; &lt;/li&gt;      &lt;li&gt;&lt;a href="http://blogs.msdn.com/expression/archive/2009/03/18/download-expression-blend-3-preview.aspx" target="_blank"&gt;Expression Blend 3&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a href="http://www.iis.net/media" target="_blank"&gt;IIS Media Services&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/03/19/what-is-net-ria-services.aspx" target="_blank"&gt;.NET RIA Services&lt;/a&gt; &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;My keynote also included a ton of demos and highlighted a bunch of great customers including: StackOverflow, NetFlix, NBC, Bondi Publishing, and KEXP.&lt;/p&gt;    &lt;p&gt;&lt;a href="http://videos.visitmix.com/MIX09/KEY01" target="_blank"&gt;Click here&lt;/a&gt; to watch the day one MIX keynote online.&amp;#160; Bill Buxton led off the keynote with a great talk about user experience for 20 minutes – I then talked for an hour and 50 minutes after him.&lt;/p&gt;    &lt;p&gt;You can also watch all the breakout sessions from MIX online for free &lt;a href="http://videos.visitmix.com/MIX09" target="_blank"&gt;here&lt;/a&gt; (Greg Duncan has an easy to navigate list of them &lt;a href="http://coolthingoftheday.blogspot.com/2009/03/mix-09-quick-video-link-list.html" target="_blank"&gt;here&lt;/a&gt; as well).&lt;/p&gt;    &lt;p&gt;I’ll be doing more in-depth blog posts in the days ahead on many of the technologies we introduced/announced and all the cool things you can do with them.&amp;#160; &lt;/p&gt;    &lt;p&gt;Hope this helps,&lt;/p&gt;    &lt;p&gt;Scott&lt;/p&gt; &lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7018879" width="1" height="1"&gt;</content><author><name>ScottGu</name><uri>http://weblogs.asp.net/members/ScottGu.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/ASP.NET/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/scottgu/archive/tags/Visual+Studio/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/.NET/default.aspx" /><category term="Talks" scheme="http://weblogs.asp.net/scottgu/archive/tags/Talks/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/scottgu/archive/tags/Community+News/default.aspx" /><category term="Silverlight" scheme="http://weblogs.asp.net/scottgu/archive/tags/Silverlight/default.aspx" /></entry><entry><title>Free ASP.NET MVC eBook Tutorial</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/scottgu/archive/2009/03/10/free-asp-net-mvc-ebook-tutorial.aspx" /><id>http://weblogs.asp.net/scottgu/archive/2009/03/10/free-asp-net-mvc-ebook-tutorial.aspx</id><published>2009-03-10T21:54:58Z</published><updated>2009-03-10T21:54:58Z</updated><content type="html">&lt;font size="2" face="arial"&gt;   &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0470384611?ie=UTF8&amp;amp;tag=scoblo04-20&amp;amp;linkCode=xm2&amp;amp;camp=1789&amp;amp;creativeASIN=0470384611" target="_blank"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 0px 15px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="bookcover[1]" border="0" alt="bookcover[1]" align="right" src="http://weblogs.asp.net/blogs/scottgu/bookcover1_6CAECF94.png" width="190" height="240" /&gt;&lt;/a&gt; There has been a lot of excitement in the community about the new ASP.NET MVC framework that is about to ship (literally any day now – announcement coming soon).&amp;#160; As with anything new, people are also asking for more tutorials/samples/documentation that cover how to get started and build applications with it.&lt;/p&gt;    &lt;p&gt;Over the last few months I’ve been helping to contribute to an ASP.NET MVC book that Scott Hanselman, Rob Conery, and Phil Haack have been writing for Wrox.&amp;#160; The book is now in production, and will be available to buy in stores soon (you can &lt;a href="http://www.amazon.com/gp/product/0470384611?ie=UTF8&amp;amp;tag=scoblo04-20&amp;amp;linkCode=xm2&amp;amp;camp=1789&amp;amp;creativeASIN=0470384611" target="_blank"&gt;pre-order it on Amazon&lt;/a&gt; today).&lt;/p&gt;    &lt;p&gt;I wrote the first chapter of the book – which is a 185 page end-to-end tutorial that walks-through building a small, but complete, ASP.NET MVC application from scratch.&amp;#160; The agreement I made with Wrox was that I’d write it for free in return for them also making it available as a free PDF download.&lt;/p&gt;    &lt;p&gt;I’m excited to announce that you can now &lt;a href="http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf" target="_blank"&gt;&lt;strong&gt;download this free end-to-end tutorial chapter&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;(it is a 14mb PDF file). It’s licensed under a “Creative Commons Attribution No Derivatives” license – which means you can share, distribute, print, or hand it out to anyone.&lt;/p&gt;    &lt;h3&gt;&lt;u&gt;NerdDinner ASP.NET MVC Tutorial&lt;/u&gt;&lt;/h3&gt;    &lt;p&gt;The tutorial starts by using the File-&amp;gt;New Project command in Visual Studio to create a brand new ASP.NET MVC project, and then incrementally adds functionality and features.&amp;#160; Along the way it covers how to:&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Create a database &lt;/li&gt;      &lt;li&gt;Build a model with validation and business rules &lt;/li&gt;      &lt;li&gt;Implement data listing/details UI on a site using Controllers and Views &lt;/li&gt;      &lt;li&gt;Enable CRUD (Create, Update, Delete) data form entry &lt;/li&gt;      &lt;li&gt;Use the ViewModel pattern to pass information from a Controller to a View &lt;/li&gt;      &lt;li&gt;Re-use UI across a site using partials and master pages &lt;/li&gt;      &lt;li&gt;Implement efficient data paging &lt;/li&gt;      &lt;li&gt;Secure an application using authentication and authorization &lt;/li&gt;      &lt;li&gt;Use AJAX to deliver dynamic updates &lt;/li&gt;      &lt;li&gt;Use AJAX to add interactive map support &lt;/li&gt;      &lt;li&gt;Perform automated unit testing (including dependency injection and mocking) &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;The application the tutorial builds is called “NerdDinner”. It provides an easy way for people to organize, host and search for new topic-based dinners online:&lt;/p&gt;    &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/scottgu/nerddinner_small1_29171E72.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="nerddinner_small[1]" border="0" alt="nerddinner_small[1]" src="http://weblogs.asp.net/blogs/scottgu/nerddinner_small1_thumb_4EA09BD3.png" width="516" height="384" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/" target="_blank"&gt;Scott Hanselman&lt;/a&gt; has been hosting NerdDinners for years, and came up with the idea of building the tutorial around an application that facilitates this.&amp;#160; He is also now hosting a live custom-skinned version of the application at &lt;a href="http://www.nerddinner.com" target="_blank"&gt;www.nerddinner.com&lt;/a&gt;)&lt;/p&gt;    &lt;h3&gt;&lt;u&gt;Download Links&lt;/u&gt;&lt;/h3&gt;    &lt;ul&gt;     &lt;li&gt;Download the free &lt;a href="http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf" target="_blank"&gt;end-to-end tutorial chapter in PDF form&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;Download the &lt;a href="http://nerddinner.codeplex.com/" target="_blank"&gt;source code + unit tests for the completed application&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;Learn more about the book from the &lt;a href="http://www.wrox.com/WileyCDA/Section/id-321793.html" target="_blank"&gt;official Wrox page&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;Purchase the &lt;a href="http://www.amazon.com/gp/product/0470384611?ie=UTF8&amp;amp;tag=scoblo04-20&amp;amp;linkCode=xm2&amp;amp;camp=1789&amp;amp;creativeASIN=0470384611" target="_blank"&gt;full book from Amazon&lt;/a&gt;. &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;Hope this helps,&lt;/p&gt;    &lt;p&gt;Scott&lt;/p&gt;    &lt;p&gt;P.S. The book is entering production now and so is officially in un-edited status (meaning professional editors haven’t gone through it yet).&amp;#160; We’ll update the PDF with any important edits once the text is final.&lt;/p&gt;    &lt;p&gt;P.P.S. And yes – this is one of the reasons my blog has been more quiet than normal the last few months.&amp;#160; Expect more regular blog posting again soon once I recover from this. :-)&lt;/p&gt; &lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6952711" width="1" height="1"&gt;</content><author><name>ScottGu</name><uri>http://weblogs.asp.net/members/ScottGu.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/ASP.NET/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/scottgu/archive/tags/Visual+Studio/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/.NET/default.aspx" /><category term="LINQ" scheme="http://weblogs.asp.net/scottgu/archive/tags/LINQ/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/scottgu/archive/tags/Community+News/default.aspx" /><category term="MVC" scheme="http://weblogs.asp.net/scottgu/archive/tags/MVC/default.aspx" /></entry><entry><title>Moonlight 1.0 Release</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/scottgu/archive/2009/02/11/moonlight-1-0-release.aspx" /><id>http://weblogs.asp.net/scottgu/archive/2009/02/11/moonlight-1-0-release.aspx</id><published>2009-02-12T01:27:00Z</published><updated>2009-02-12T01:27:00Z</updated><content type="html">&lt;font size="2" face="arial"&gt;   &lt;p&gt;I am excited to announce that &lt;a href="http://www.novell.com/news/press/moonlight-shines-on-the-linux-desktop/" target="_blank"&gt;Novell today released version 1.0 of Moonlight&lt;/a&gt;, and is making it available for download at no cost with support for most major Linux distro’s (including openSUSE, SUSE Linux Enterprise, Fedora, Red Hat, and Ubuntu). For those unfamiliar with it, Moonlight is a joint effort between Novell and Microsoft of an open-source implementation of Silverlight for Linux.&lt;/p&gt;    &lt;p&gt;My team has worked closely with Miguel de Icaza and his team on the project.&amp;#160; We are also shipping the Microsoft Media Pack – which is a set of licensed media codecs that enable playback for all Silverlight compatible media (wmv, wma, mp3, etc.), as a free download for Linux users who run Moonlight.&lt;/p&gt;    &lt;p&gt;Moonlight enables Linux users to view Silverlight content and Silverlight applications.&amp;#160; Recently the official Presidential Inauguration Committee broadcast the &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/01/19/silverlight-and-the-2009-presidential-inauguration.aspx" target="_blank"&gt;inauguration of President Barack Obama using Silverlight&lt;/a&gt;.&amp;#160; Over 50,000 viewers using Linux installed Moonlight and watched the event live using it.&amp;#160; Miguel de Icaza and the volunteers behind Moonlight &lt;a href="http://arstechnica.com/open-source/news/2009/01/obama-inauguration-shines-on-linux-too-with-moonlight.ars" target="_blank"&gt;made a tremendous effort&lt;/a&gt; to make sure that Linux users were able to watch the broadcast of the inauguration, even though the official release of Moonlight was still a few weeks away.&lt;/p&gt;    &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/scottgu/image_7118B128.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/scottgu/image_thumb_0258A09A.png" width="628" height="658" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;I am really excited about the awesome work Miguel and his team at Novell have done, and we’re looking forward to seeing Moonlight 2 (a Silverlight 2 compatible implementation with .NET support) which the team is hard at work on. For more details on the Moonlight 1.0 release, check out &lt;a href="http://tirania.org/blog/archive/2009/Feb-11.html" target="_blank"&gt;Miguel’s blog post on it&lt;/a&gt;. &lt;/p&gt;    &lt;p&gt;Thanks,&lt;/p&gt;    &lt;p&gt;Scott&lt;/p&gt; &lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6898119" width="1" height="1"&gt;</content><author><name>ScottGu</name><uri>http://weblogs.asp.net/members/ScottGu.aspx</uri></author><category term="Community News" scheme="http://weblogs.asp.net/scottgu/archive/tags/Community+News/default.aspx" /><category term="Silverlight" scheme="http://weblogs.asp.net/scottgu/archive/tags/Silverlight/default.aspx" /></entry><entry><title>ASP.NET MVC 1.0 Release Candidate Now Available</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/scottgu/archive/2009/01/27/asp-net-mvc-1-0-release-candidate-now-available.aspx" /><id>http://weblogs.asp.net/scottgu/archive/2009/01/27/asp-net-mvc-1-0-release-candidate-now-available.aspx</id><published>2009-01-27T20:13:09Z</published><updated>2009-01-27T20:13:09Z</updated><content type="html">&lt;font size="2" face="arial"&gt;   &lt;p&gt;Today we shipped the ASP.NET MVC 1.0 Release Candidate (RC).&amp;#160; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=141184&amp;amp;clcid=0x409" target="_blank"&gt;Click here&lt;/a&gt; to download it (note: the link just went live so if it isn’t working wait a few minutes for the server you are hitting to refresh).&amp;#160; It works with both Visual Studio 2008 and Visual Web Developer 2008 (which is free).&lt;/p&gt;    &lt;p&gt;Today’s RC is the last public release of ASP.NET MVC that we’ll ship prior to the final “1.0” release.&amp;#160; We expect to ship the final ASP.NET MVC 1.0 release next month.&lt;/p&gt;    &lt;p&gt;In addition to bug fixes, today’s build includes several new features.&amp;#160; It also includes some refinements to existing features based on customer feedback.&amp;#160; Please read the &lt;a href="http://go.microsoft.com/fwlink/?LinkID=137661&amp;amp;clcid=0x409" target="_blank"&gt;release notes&lt;/a&gt; that ship with the ASP.NET MVC download for full details on all changes.&amp;#160; The &lt;a href="http://go.microsoft.com/fwlink/?LinkID=137661&amp;amp;clcid=0x409" target="_blank"&gt;release notes&lt;/a&gt; include detailed instructions on how to upgrade existing applications built with the ASP.NET MVC Beta to the RC.&lt;/p&gt;    &lt;h3&gt;&lt;u&gt;Visual Studio Tooling Improvements&lt;/u&gt;&lt;/h3&gt;    &lt;p&gt;The RC includes several new Visual Studio tooling features (above and beyond the existing support in the beta – which I won’t cover here).&amp;#160; These features include:&lt;/p&gt;    &lt;p&gt;&lt;u&gt;Add Controller Command&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;You can now type Ctrl-M, Ctrl-C within an ASP.NET MVC project, or right-click on the /Controller folder and choose the “Add-&amp;gt;Controller” context menu item to create new controller classes:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step1.png" /&gt; &lt;/p&gt;    &lt;p&gt;This will cause an “Add Controller” dialog to appear that allows you to name the Controller to create, as well as optionally indicate whether you wish to automatically “scaffold” common CRUD methods:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step2.png" /&gt; &lt;/p&gt;    &lt;p&gt;Clicking the “Add” button will cause the controller class to be created and added to the project:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step3.png" /&gt; &lt;/p&gt;    &lt;p&gt;&lt;u&gt;Add View Command&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;You can now type Ctrl-M, Ctrl-V within a Controller action method, or right-click within an action method and choose the “Add View” context menu item to create new view templates:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step42.png" /&gt; &lt;/p&gt;    &lt;p&gt;This will cause an “Add View” dialog to appear that allows you to name and create a new view (it is pre-populated with convention-based options).&amp;#160; It allows you to create “empty” view templates, or automatically generate/scaffold view templates that are based on the type of object passed to the view by the Controller action method.&amp;#160; The scaffolding infrastructure uses reflection when creating view templates – so it can scaffold new templates based on any POCO (plain old CLR object) passed to it.&amp;#160; It does not have a dependency on any particular ORM or data implementation.&lt;/p&gt;    &lt;p&gt;For example, below we are indicating that we want to scaffold a “List” view template based on the sequence of Product objects we are passing from our action method above:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step5.png" /&gt; &lt;/p&gt;    &lt;p&gt;Clicking the “Add” button will cause a view template to be created for us within the \Views\Products\ directory with a default “scaffold” implementation:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step51.png" /&gt; &lt;/p&gt;    &lt;p&gt;We can then run our application and request the &lt;em&gt;/products&lt;/em&gt; URL within our browser to see a listing of our retrieved products:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step7.png" /&gt; &lt;/p&gt;    &lt;p&gt;The RC ships with a number of built-in scaffold templates: “Empty”, “List”, “Details”, “Edit” and “Create” (you can also add your own scaffold templates – more details on this in a moment).&amp;#160; &lt;/p&gt;    &lt;p&gt;For example, to enable product editing support we can implement the HTTP-GET version of our “Edit” action method on our Products controller like below and then invoke the “Add View” command:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step43.png" /&gt; &lt;/p&gt;    &lt;p&gt;Within the “Add View” dialog we can indicate we are passing a “Product” object to our view and choose the “Edit” template option to scaffold it:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step9.png" /&gt; &lt;/p&gt;    &lt;p&gt;Clicking the “Add” button will cause an edit view template to be created with a default scaffold implementation within the \Views\Products\ directory:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step50.png" /&gt; &lt;/p&gt;    &lt;p&gt;We can then run our application and request the &lt;em&gt;/products/edit/1&lt;/em&gt; URL within our browser to edit the Product details:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step47.png" /&gt; &lt;/p&gt;    &lt;p&gt;To save edit changes we can implement the HTTP-POST version of our “Edit” action method on our Products controller:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step49.png" /&gt; &lt;/p&gt;    &lt;p&gt;Notice in the code above how in the case of an error (for example: someone enters a bogus string for a number value) we redisplay the view.&amp;#160; The “edit” and “create” scaffold templates contain the HTML validation helper methods necessary to preserve user input and flag invalid input elements in red when this happens:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step48.png" /&gt; &lt;/p&gt;    &lt;p&gt;You’ll rarely end up using a scaffold-created template exactly as-is, and often will end up completely replacing it.&amp;#160; But being able to get an initial implementation up and running quickly, and having an initial view template for your scenario that you can then easily tweak is really useful.&lt;/p&gt;    &lt;p&gt;Because the scaffold infrastructure supports scaffolding views against any plain-old CLR object, you can use it with both domain model objects (including those mapped with LINQ to SQL, LINQ to Entities, nHibernate, LLBLGen Pro, SubSonic, and other popular ORM implementations) as well as to create scaffolds with custom Presentation Model/ViewModel classes.&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&lt;u&gt;Adding and Customizing Scaffold Templates&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;ASP.NET MVC’s scaffolding infrastructure is implemented using Visual Studio’s built-in T4 templating architecture (Scott Hanselman has a nice blog post on T4 &lt;a href="http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx"&gt;here&lt;/a&gt;).&amp;#160; &lt;/p&gt;    &lt;p&gt;You can customize/override any of the built-in ASP.NET MVC scaffold template implementations.&amp;#160; You can also create additional scaffold templates (for example: the “ScottGu Crazy Look” scaffold option) and have them be displayed as options within the “Add View” dialog.&lt;/p&gt;    &lt;p&gt;To customize/add scaffold templates at the machine-wide level, open the &lt;em&gt;“C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC\CodeTemplates”&lt;/em&gt; folder:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step14.png" /&gt; &lt;/p&gt;    &lt;p&gt;The “AddController” sub-folder contains the scaffold template for the “Add Controller” dialog.&amp;#160; The “AddView” sub-folder contains the scaffold templates for the “Add View” dialog:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step15.png" /&gt; &lt;/p&gt;    &lt;p&gt;The scaffold templates populated within the “Add View” dialog are simply text files that have the “.tt” file-name extension.&amp;#160; These “.tt” text files contain inline C# or VB code that executes when the template is selected.&amp;#160; &lt;/p&gt;    &lt;p&gt;You can open and edit any of the existing files to customize the default scaffolding behavior.&amp;#160; You can also add new “.tt” template files – like I have above with the “Scott Crazy Look.tt” file.&amp;#160; When you add a new template file the “Add View” dialog will be updated to automatically include it in the list of available scaffold options:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step16.png" /&gt; &lt;/p&gt;    &lt;p&gt;In addition to customizing/adding template files at the machine level, you can also add/override them at the individual project level.&amp;#160; This also enables you to check-in the templates under source control and easily use them across a team.&lt;/p&gt;    &lt;p&gt;You can customize the scaffold templates at a project level by adding a “CodeTemplates” folder underneath your project.&amp;#160; You can then have “AddController” and “AddView” sub-folders within it:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step17.png" /&gt; &lt;/p&gt;    &lt;p&gt;You can override any of the default machine-wide templates simply be adding a “.tt” file with the same name to the project.&amp;#160; For example, above we are overriding the default “Controller.tt” scaffold template used in “Add Controller” scenarios.&amp;#160; &lt;/p&gt;    &lt;p&gt;You can add new view-template scaffold files to the list by placing them within the “AddView” folder.&amp;#160; For example, above we added a “Yet Another Crazy Look.tt” view template to our project.&amp;#160; When we use the “Add View” dialog we’ll now see a union of the templates defined at the machine and project level:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step18.png" /&gt; &lt;/p&gt;    &lt;p&gt;&lt;em&gt;Note: When you add “.tt” templates under the \CodeTemplates folder make sure to set the “Custom Tool” property of each of the “.tt” template files to an empty string value within the property grid (otherwise you’ll get an error trying to run it).&amp;#160; You might also need to close and reopen the project to clear a spurious error from the error list.&amp;#160; We’ll be publishing more blog posts that cover creating/customizing scaffolding templates shortly.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;u&gt;Go To Controller / Go To View&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;The RC build now supports the ability to quickly navigate between the Controllers and Views within your projects.&amp;#160; &lt;/p&gt;    &lt;p&gt;When your cursor is within a Controller action method you can type Ctrl-M, Ctrl-G to quickly navigate to its corresponding view template.&amp;#160; You can also perform this same navigation jump by right-clicking within the action method and selecting the “Go To View” menu option:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step19.png" /&gt; &lt;/p&gt;    &lt;p&gt;In the example above we used the “Go To View” command within the “Edit” action method of the ProductsController class.&amp;#160; This will cause the \Views\Products\Edit.aspx view template to be opened and have the default focus within VS:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step20.png" /&gt; &lt;/p&gt;    &lt;p&gt;Within view templates you can also now type Ctrl-M, Ctrl-G to quickly navigate to the view’s corresponding Controller class.&amp;#160; You can also perform this navigation jump by right-clicking within the view template and selecting the “Go To Controller” menu option:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step21.png" /&gt; &lt;/p&gt;    &lt;p&gt;&lt;u&gt;MSBuild Task for Compiling Views&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;By default when you do a build on an ASP.NET MVC project it compiles all code within the project, except for the code within view template files.&amp;#160; With the ASP.NET MVC Beta you had to roll your own MSBuild task if you wanted to compile the code within view templates.&amp;#160; The ASP.NET MVC RC build now includes a built-in MSBuild task that you can use to include views as part of the project compilation process.&amp;#160; This will verify the syntax and code included inline within all views, master pages, and partial views for the application, and give you build errors if it encounters any problems.&lt;/p&gt;    &lt;p&gt;For performance reasons we don't recommend running this for quick compiles during development, but it is convenient to add to particular build configuration profiles (for example: staging and deployment) and/or for use with Build or CI (continuous integration) servers.&amp;#160; Please review the release notes for the steps to enable this.&lt;/p&gt;    &lt;p&gt;&lt;u&gt;View Refactoring Support&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;The names of the files and folders under the \Views application sub-folder will now automatically be updated when you perform controller class rename or action method rename using the “Rename” refactoring command in VS 2008.&amp;#160; VS 2008 will apply the standard convention-based naming pattern to existing view files/folders when the Controller class is updated.&lt;/p&gt;    &lt;h3&gt;&lt;u&gt;View Improvements&lt;/u&gt;&lt;/h3&gt;    &lt;p&gt;The RC build includes a number of view-specific enhancements that were incorporated based on feedback during the preview releases.&lt;/p&gt;    &lt;p&gt;&lt;u&gt;Views without Code-Behind Files&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;Based on feedback we’ve changed view-templates to not have a code-behind file by default.&amp;#160; This change helps reinforce the purpose of views in a MVC application (which are intended to be purely about rendering and to not contain any non-rendering related code), and for most people eliminates unused files in the project.&lt;/p&gt;    &lt;p&gt;The RC build now adds C# and VB syntax support for inheriting view templates from base classes that use generics.&amp;#160; For example, below we are using this with the Edit.aspx view template – whose “inherits” attribute derives from the ViewPage&amp;lt;Product&amp;gt; type:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step22.png" /&gt; &lt;/p&gt;    &lt;p&gt;One nice benefit of not using a code-behind file is that you'll now get immediate intellisense within view template files when you add them to the project.&amp;#160; With previous builds you had to do a build/compile immediately after creating a view in order to get code intellisense within it.&amp;#160; The RC makes the workflow of adding and immediately editing a view compile-free and much more seamless.&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Important: If you are upgrading a ASP.NET MVC project that was created with an earlier build make sure to follow the steps in the release notes – the web.config file under the \Views directory needs to be updated with some settings in order for the above generics based syntax to work.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;u&gt;Model Property&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;With previous builds of ASP.NET MVC, you accessed the strongly typed model object passed to the view using the ViewData.Model property:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcviews/step4.png" /&gt; &lt;/p&gt;    &lt;p&gt;The above syntax still works, although now there is also a top-level &amp;quot;Model&amp;quot; property on ViewPage that you can also use:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcviews/step5.png" /&gt; &lt;/p&gt;    &lt;p&gt;This property does the same thing as the previous code sample - its main benefit is that it allows you to write the code a little more concisely.&amp;#160; It also allows you to avoid using the ViewData dictionary in cases where you want the view template to only interact with the strongly-typed model passed to it.&lt;/p&gt;    &lt;p&gt;&lt;u&gt;Setting the Title &lt;/u&gt;&lt;/p&gt;    &lt;p&gt;The default master-page template added to new ASP.NET MVC projects now has an &amp;lt;asp:contentplaceholder/&amp;gt; element within its &amp;lt;head&amp;gt; section.&amp;#160; This makes it much easier for view templates to control the &amp;lt;title&amp;gt; element of the HTML page rendered back – and not require the Controller to explicitly pass a “title” parameter to configure it (which was the default with previous ASP.NET MVC builds and we thought questionable from a responsibilities perspective).&amp;#160; &lt;/p&gt;    &lt;p&gt;For example, to customize the &amp;lt;title&amp;gt; of our Edit view to include the current product name we can now add the below code to our Edit.aspx template to drive the title directly off of the model object being passed the view:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step23.png" /&gt; &lt;/p&gt;    &lt;p&gt;The above code will then cause the browser to render the title using the Product name at runtime:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step24.png" /&gt; &lt;/p&gt;    &lt;p&gt;In addition to setting the &amp;lt;title&amp;gt; element, you can also use the above approach to dynamically add other &amp;lt;head&amp;gt; elements at runtime.&amp;#160; Another common scenario this is useful with is configuring model/view specific &amp;lt;meta/&amp;gt; elements for search engine optimization.&amp;#160; &lt;/p&gt;    &lt;p&gt;&lt;u&gt;Strongly Typed HTML/AJAX Helpers&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;One of the requests a few people have asked for is the ability to use strongly-typed expression syntax (instead of strings) when referring to the Model when using a View's HTML and AJAX helper objects.&lt;/p&gt;    &lt;p&gt;With the beta build of ASP.NET MVC this wasn't possible, since the HtmlHelper and AjaxHelper helper classes didn't expose the model type in their signature, and so people had to build helper methods directly off of the ViewPage&amp;lt;TModel&amp;gt; base class in order to achieve this.&amp;#160; &lt;/p&gt;    &lt;p&gt;The ASP.NET MVC RC build introduces new HtmlHelper&amp;lt;TModel&amp;gt; and AjaxHelper&amp;lt;TModel&amp;gt; types that are exposed on the ViewPage&amp;lt;TModel&amp;gt; base class.&amp;#160; These types now allow anyone to build strongly-typed HTML and AJAX helper extensions that use expression syntax to refer to the View's model.&amp;#160; For example: &lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step25.png" /&gt; &lt;/p&gt;    &lt;p&gt;The HTML form helper extension methods in the core ASP.NET MVC V1 assembly still use the non-expression based string syntax.&amp;#160; The “MVC Futures” assembly released today (which works with the RC) has a few initial implementations of expression-syntax based form helper methods.&amp;#160;&amp;#160; We are going to iterate on these a bit longer and then consider adding them into the ASP.NET MVC core assembly in the next release.&amp;#160; &lt;/p&gt;    &lt;p&gt;You can of course also add your own helper methods (using either strings or strongly-typed expressions).&amp;#160; The built-in HTML/AJAX helper methods can also optionally be removed (because they are extension methods) if you want to replace or override them with your own&lt;/p&gt;    &lt;h3&gt;&lt;u&gt;Form Post Improvements&lt;/u&gt;&lt;/h3&gt;    &lt;p&gt;The RC build includes a number of form-post specific enhancements:&lt;/p&gt;    &lt;p&gt;&lt;u&gt;[Bind(Prefix=””)] No Longer Required for Common Scenarios&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;The RC build no longer requires you to explicitly use a [Bind] attribute (or set its prefix value to “”) in order to map incoming form post parameters that do not have a prefix to complex action method parameters.&lt;/p&gt;    &lt;p&gt;To see what this means, let’s implement the “Create” scenario for our ProductsController.&amp;#160; We’ll begin by implementing the HTTP-GET version of our “Create” action method.&amp;#160; We’ll do this with code below that returns a View based on an empty Product object:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step26.png" /&gt; &lt;/p&gt;    &lt;p&gt;We can then right-click within our action method, choose the “Add View” command and scaffold a “create” view template that is based on a Product:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step27.png" /&gt; &lt;/p&gt;    &lt;p&gt;Notice above how our Html.TextBox() helper methods are referencing the “ProductName” and “SupplierID” properties on our Product object.&amp;#160; This will generate HTML markup like below where the input “name” attributes are “ProductName” and “SupplierID”:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step28.png" /&gt; &lt;/p&gt;    &lt;p&gt;We can then implement the HTTP-POST version of our “Create” action method. We’ll have our action method take a Product object as a method parameter:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step40.png" /&gt; &lt;/p&gt;    &lt;p&gt;With the ASP.NET MVC Beta we would have had to add a [Bind(Prefix=””)] attribute in front of our Product argument above – otherwise the ASP.NET MVC binding infrastructure would have only looked for form post values with a “productToCreate.” prefix (for example: productToCreate.ProductName and productToCreate.SupplierID) and not found the submitted values from our form (which don’t have a prefix).&amp;#160; &lt;/p&gt;    &lt;p&gt;With the RC build, the default action method binders still first attempt to map a productToCreate.ProductName form value to the Product object.&amp;#160; If they don’t find such a value, though, they now also attempt to map “ProductName” to the Product object.&amp;#160; This makes scenarios where you pass in complex objects to an action method syntactically cleaner and less verbose.&amp;#160; You can take advantage of this feature both when mapping domain objects (like our Product object above) as well as with Presentation Model/ViewModel classes (like a ProductViewModel class).&lt;/p&gt;    &lt;p&gt;A completed implementation of our Create action method (including basic input type error handling) might look like below:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step52.png" /&gt; &lt;/p&gt;    &lt;p&gt;Now our create action will save the Product object if all values are entered correctly.&amp;#160; When a user attempts to create a Product with invalid Product property values (for example: a string “Bogus” instead of a valid Decimal value), the form will redisplay and flag the invalid input elements in red:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step41.png" /&gt; &lt;/p&gt;    &lt;p&gt;&lt;u&gt;ModelBinder API Improvements&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;The model binding infrastructure within the ASP.NET MVC Release Candidate has been refactored to add additional extensibility points to enable custom binding and validation schemes.&amp;#160; You can read more about these details in the ASP.NET MVC RC release notes.&lt;/p&gt;    &lt;p&gt;Model Binders can also now be registered for interfaces in addition to classes.&amp;#160; &lt;/p&gt;    &lt;p&gt;&lt;u&gt;IDataErrorInfo Support&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;The default model binder with ASP.NET MVC now supports classes that implement the IDataErrorInfo interface.&amp;#160; This enables a common approach to raise validation error messages in a way that can be shared across Windows Forms, WPF and now ASP.NET MVC applications.&lt;/p&gt;    &lt;h3&gt;&lt;u&gt;Unit Testing Improvements&lt;/u&gt;&lt;/h3&gt;    &lt;p&gt;The ASP.NET MVC RC includes some significant improvements to unit testing:&lt;/p&gt;    &lt;p&gt;&lt;u&gt;ControllerContext changed to no longer derive from RequestContext&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;The RC build includes a refactoring of the ControllerContext class that significantly simplifies common unit testing scenarios.&amp;#160; The ControllerContext class no longer derives from RequestContext and now instead encapsulates RequestContext and exposes it as a property.&amp;#160; The properties of ControllerContext and its derived types are also now virtual instead of sealed – making it significantly easier to create mock objects.&lt;/p&gt;    &lt;p&gt;To see how this helps, let’s consider an action method like below that uses both the “Request” and “User” intrinsic objects:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step38.png" /&gt; &lt;/p&gt;    &lt;p&gt;Testing the above action method with previous ASP.NET MVC builds would have required mocking RequestContext and ControllerContext (with some non-obvious constructors that also brought in a RouteData object).&lt;/p&gt;    &lt;p&gt;With the RC build we can now unit test it like below (using &lt;a href="http://code.google.com/p/moq/"&gt;Moq&lt;/a&gt; to mock a ControllerContext for our Controller that allows us to simulate the Request.IsAuthenticated and User.Identity.Name properties):&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step39.png" /&gt; &lt;/p&gt;    &lt;p&gt;The refactoring improvements made help out not just with testing Controller actions – but also help with testing filters, routes, custom actionresult types, and a variety of other scenarios.&lt;/p&gt;    &lt;p&gt;&lt;u&gt;AccountsController Unit Tests &lt;/u&gt;&lt;/p&gt;    &lt;p&gt;The ASP.NET MVC Project Template included with the RC build now adds 25 pre-built unit tests that verify the behavior of the AccountsController class (which is a controller added to the project by default to handle login and account management scenarios).&amp;#160; This makes refactoring/updating AccountsController easier.&amp;#160; The AccountsController implementation has also been modified to more easily enable non-Membership Provider based credential systems to be integrated.&lt;/p&gt;    &lt;h3&gt;&lt;u&gt;Cross Site Request Forgery (CSRF) Protection&lt;/u&gt;&lt;/h3&gt;    &lt;p&gt;Cross-site request forgery (CSRF) attacks (also referred to as XSRF attacks) cause users of a trusted browser agent to take unintended actions on a site.&amp;#160; These attacks rely on the fact that a user might still be logged in to another site.&amp;#160; A malicious Web site exploits this by creating a request to the original site (for example: by linking to a URL on the site using a &amp;lt;img src=””/&amp;gt; element on the hacker site). The request is made using the user’s browser and thus with the user’s authentication token and credentials. The attacker hopes that the user’s authentication or session cookie is still valid and if so, the attacker can sometimes take disruptive action.&amp;#160; You can learn more about this hacking technique &lt;a href="http://en.wikipedia.org/wiki/Cross-site_request_forgery"&gt;here&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;The ASP.NET MVC RC now includes some built-in CSRF protection helpers that can help mitigate CSRF attacks.&amp;#160; For example, you can now use the Html.AntiForgeryToken() helper to render a hidden input token within forms:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step31.png" /&gt; &lt;/p&gt;    &lt;p&gt;This helper issues a HTTP cookie and renders a hidden input element into our form.&amp;#160; Malicious web-sites will not be able to access both values.&lt;/p&gt;    &lt;p&gt;We can then apply a new [ValidateAntiForgeryToken] attribute onto any action method we want to protect:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step32.png" /&gt; &lt;/p&gt;    &lt;p&gt;This will check for the existence of the appropriate tokens, and prevent our HTTP-POST action method from running if they don’t match (reducing the chance of a successful CSRF attack).&lt;/p&gt;    &lt;h3&gt;&lt;u&gt;File Handling Improvements&lt;/u&gt;&lt;/h3&gt;    &lt;p&gt;The ASP.NET MVC RC includes a number of file handling enhancements:&lt;/p&gt;    &lt;p&gt;&lt;u&gt;FileResult and File() helper method&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;The RC build adds a new FileResult class that is used to indicate that a file is being returned as an ActionResult from a Controller action method.&amp;#160; The Controller base class also now has a set of File() helper methods that make it easy to create and return a FileResult.&lt;/p&gt;    &lt;p&gt;For example, let’s assume we are trying to build a photo management site.&amp;#160; We could define a simple “Photo” class like below that encapsulates the details about a stored Photo:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step33.png" /&gt; &lt;/p&gt;    &lt;p&gt;We could then use the new File() helper method like below to implement a “DisplayPhoto” action method on a PhotoManager controller that could be used to render the Photo out of a database store.&amp;#160; In the code below we are passing the File() helper the bytes to render, as well as the mime-type of the file. If we pointed a &amp;lt;img src=””/&amp;gt; element at our action method URL the browser would display the photo inline within a page:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step34.png" /&gt; &lt;/p&gt;    &lt;p&gt;If we wanted an end-user to be able to download the photo and save it locally, we could implement a “DownloadPhoto” action method like below.&amp;#160; In the code below we are passing a third parameter – which will cause ASP.NET MVC to set a header that causes the browser to display a “Save As…” dialog which is pre-populated with the filename we’ve supplied:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step35.png" /&gt; &lt;/p&gt;    &lt;p&gt;When a user clicks a link to the /PhotoManager/DowloadPhoto/1232 URL they’ll be prompted to save the picture:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step36.png" /&gt; &lt;/p&gt;    &lt;p&gt;&lt;u&gt;File Uploading Support&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;The RC build also includes built-in model-binder support for uploaded files and multi-part mime content.&amp;#160; &lt;/p&gt;    &lt;p&gt;For example, we could have a &amp;lt;form&amp;gt; whose enctype attribute is set to “multipart/form-data” perform a post to the /PhotoManager/UploadPhoto URL.&amp;#160; If a &amp;lt;input type=”file” name=”fileToUpload”/&amp;gt; element was within the form it would cause the file selected by the end-user to be passed to our action method as an HttpPostedFileBase object:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step37.png" /&gt; &lt;/p&gt;    &lt;p&gt;We could then use the HttpPostedFileBase object to get access to the raw bytes of the uploaded file, its mime-type, and optionally save it to a database or disk.&lt;/p&gt;    &lt;h3&gt;&lt;u&gt;AJAX Improvements&lt;/u&gt;&lt;/h3&gt;    &lt;p&gt;The ASP.NET MVC RC includes a number of AJAX enhancements:&lt;/p&gt;    &lt;p&gt;&lt;u&gt;jQuery Intellisense Files included within ASP.NET MVC Project Template&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;Newly created ASP.NET MVC projects now include both the standard jQuery library (both full and compressed versions), as well as the –vsdoc intellisense documentation file used by Visual Studio to provide richer intellisense support for it (you can learn more about this &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/11/21/jquery-intellisense-in-vs-2008.aspx"&gt;here&lt;/a&gt;):&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcrc/mvcrc/step30.png" /&gt; &lt;/p&gt;    &lt;p&gt;This enables rich jQuery JavaScript intellisense within client-script blocks and JavaScript files:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/jquerynov/step5.png" /&gt; &lt;/p&gt;    &lt;p&gt;Today’s RC build ships jQuery 1.2.6.&amp;#160; We are planning to ship the upcoming jQuery 1.3.1 release for the final ASP.NET MVC 1.0 release, and will include an updated JavaScript intellisense file for it.&amp;#160; &lt;/p&gt;    &lt;p&gt;&lt;u&gt;Request.IsAjaxRequest Property&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;The Request.IsAjaxRequest property can be used to detect whether a request is being sent from an AJAX call on the client (and is useful for scenarios where you want to gracefully degrade if AJAX is not enabled).&amp;#160; The logic within this method was updated with the RC to now recognize the “X-Requested-With” HTTP header (in addition to the form field sent by ASP.NET AJAX).&amp;#160; This is a well known header sent by JavaScript libraries such a Prototype, jQuery, and Dojo – and now enables a unified way to check for AJAX within an ASP.NET MVC request.&amp;#160; &lt;/p&gt;    &lt;p&gt;&lt;u&gt;JavaScriptResult ActionResult and JavaScript() helper method&lt;/u&gt;&lt;/p&gt;    &lt;p&gt;The Controller base class now has a JavaScript() helper method that returns a new ActionResult class of type JavaScriptResult.&amp;#160; This supports the ability to return raw JavaScript that will then be executed on the client by the built-in ASP.NET MVC helper methods.&amp;#160; This can be useful for scenarios where you want to cause conditional JavaScript to execute on the client based on server logic.&lt;/p&gt;    &lt;h3&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/h3&gt;    &lt;p&gt;We are pretty excited to be in the final “home stretch” of ASP.NET MVC V1.&amp;#160; Please report any issues you find with the RC build as soon as possible so that we can get them resolved for the final release.&amp;#160; The team plans to carefully monitor feedback over the next few weeks, and assuming no big issues come up ship the official V1 build next month.&lt;/p&gt;    &lt;p&gt;Hope this helps,&lt;/p&gt;    &lt;p&gt;Scott&lt;/p&gt; &lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6862249" width="1" height="1"&gt;</content><author><name>ScottGu</name><uri>http://weblogs.asp.net/members/ScottGu.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/ASP.NET/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/scottgu/archive/tags/Visual+Studio/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/.NET/default.aspx" /><category term="MVC" scheme="http://weblogs.asp.net/scottgu/archive/tags/MVC/default.aspx" /></entry><entry><title>Silverlight and the 2009 Presidential Inauguration</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/scottgu/archive/2009/01/19/silverlight-and-the-2009-presidential-inauguration.aspx" /><id>http://weblogs.asp.net/scottgu/archive/2009/01/19/silverlight-and-the-2009-presidential-inauguration.aspx</id><published>2009-01-19T20:21:17Z</published><updated>2009-01-19T20:21:17Z</updated><content type="html">&lt;font size="2" face="arial"&gt;   &lt;p&gt;Tomorrow&amp;#8217;s presidential inauguration of Barack Obama will be a truly historic event.&lt;/p&gt;    &lt;p&gt;Silverlight is being used as an enabling technology on several sites that will allow those of us who can&amp;#8217;t be there in person to share the experience online.&lt;/p&gt;    &lt;h3&gt;Presidential Inaugural Committee&lt;/h3&gt;    &lt;p&gt;The Presidential Inaugural Committee has worked with iStreamPlanet to enable live and live and on-demand video streaming of the Inauguration events at the official Presidential Inaugural Committee web site: &lt;a target="_blank" href="http://www.pic2009.org/page/content/live"&gt;www.pic2009.org&lt;/a&gt;. It streamed its first live video on Saturday, with the train ride that took President-elect Obama from Philadelphia to Washington, D.C. The official Inaugural swearing-in ceremony, speeches and parade will also be streamed live online on Tuesday, January 20. &lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/obama/step1.png" /&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;You can read more about the Presidential Inaugural Committee &lt;a target="_blank" href="http://www.microsoft.com/presspass/press/2009/jan09/01-16PICMSSilverlightPR.mspx"&gt;here&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;&lt;u&gt;Update&lt;/u&gt;: The site was viewable not just on Windows and Mac systems with Silverlight, but also on Linux systems using Moonlight (the Linux version of Silverlight built by Novell),&amp;#160; You can learn more about the Linux support &lt;a target="_blank" href="http://arstechnica.com/news.ars/post/20090120-obama-inauguration-shines-on-linux-too-with-moonlight.html"&gt;here&lt;/a&gt;.&lt;/p&gt;    &lt;h3&gt;CNN and MSNBC with Photosynth&lt;/h3&gt;    &lt;p&gt;CNN and MSNBC are both launching Photosynth viewers that will help capture the Oath of Office experience. They will combine pictures takes from professional photographers with pictures uploaded from people in the crowd to create an interactive Photosynth experience of the event using Silverlight&amp;#8217;s built-in DeepZoom feature to deliver an amazing 3D viewing of it.&lt;/p&gt;    &lt;p&gt;Check out &lt;a target="_blank" href="http://www.cnn.com/SPECIALS/2009/44.president/inauguration/themoment/"&gt;CNN&amp;#8217;s&lt;/a&gt; and &lt;a target="_blank" href="http://www.politics.msnbc.com"&gt;MSNBC&amp;#8217;s&lt;/a&gt; pages a few hours after viewers send in their pictures of the inauguration crowd, the President-elect&amp;#8217;s raised hand, and everything in between.&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/obama/step2.png" /&gt; &lt;/p&gt;    &lt;p&gt;You can learn more about Photosynth and Silverlight from the Photosynth team blog &lt;a target="_blank" href="http://blogs.msdn.com/photosynth/archive/2009/01/16/photosynthing-the-inauguration-of-the-44th-president-of-the-united-states.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;    &lt;h3&gt;CBS Television Stations &lt;/h3&gt;    &lt;p&gt;CBS Television Stations will be leveraging Silverlight and Move Networks&amp;#8217; streaming services to deliver a live HD streaming experience (up to 2.4 Mpbs) for online viewers. CBS will roll out the experience to a number of major market stations including: Chicago, Los Angeles, Denver and New York. Visitors to the CBS sites will be able to watch a variety of inaugural activities, with up to seven camera feeds for live events, as well as reports from CBS reporters on site, and real-time Twitter integration.&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/obama/step3.png" /&gt; &lt;/p&gt;    &lt;p&gt;You can watch the CBS experience &lt;a target="_blank" href="http://kdka.com/InaugurationPlayer/Default.htm"&gt;here&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;This week will be an exciting part of history.&amp;#160; Hope you get a chance to enjoy experiencing it with Silverlight!&lt;/p&gt;    &lt;p&gt;Scott&lt;/p&gt; &lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6845005" width="1" height="1"&gt;</content><author><name>ScottGu</name><uri>http://weblogs.asp.net/members/ScottGu.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/.NET/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/scottgu/archive/tags/Community+News/default.aspx" /><category term="Silverlight" scheme="http://weblogs.asp.net/scottgu/archive/tags/Silverlight/default.aspx" /></entry><entry><title>ASP.NET MVC Design Gallery and Upcoming View Improvements with the ASP.NET MVC Release Candidate</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/scottgu/archive/2008/12/19/asp-net-mvc-design-gallery-and-upcoming-view-improvements-with-the-asp-net-mvc-release-candidate.aspx" /><id>http://weblogs.asp.net/scottgu/archive/2008/12/19/asp-net-mvc-design-gallery-and-upcoming-view-improvements-with-the-asp-net-mvc-release-candidate.aspx</id><published>2008-12-19T08:44:10Z</published><updated>2008-12-19T08:44:10Z</updated><content type="html">&lt;font size="2" face="arial"&gt;   &lt;p&gt;Today we launched a new &lt;a target="_blank" href="http://www.asp.net/mvc/gallery/"&gt;ASP.NET MVC Design Gallery&lt;/a&gt; on the &lt;a href="http://www.asp.net"&gt;www.asp.net&lt;/a&gt; site.&amp;#160; The design gallery hosts free HTML design templates that you can download and easily use with your ASP.NET MVC applications.&amp;#160; Included with each design template is a Site.master file, a CSS stylesheet, and optionally a set of images, partials, and helper methods that support them.&amp;#160; &lt;/p&gt;    &lt;p&gt;The &lt;a target="_blank" href="http://www.asp.net/mvc/gallery/"&gt;gallery&lt;/a&gt; allows you to preview each of the designs online, as well as download a .zip version of them that you can extract and integrate into your site.&amp;#160; The gallery allows anyone to create and submit new designs under the creative commons license.&amp;#160; Visitors to the gallery can vote to provide feedback on them (thumbs up/thumbs down).&amp;#160; The most popular designs show up at the top of the gallery.&amp;#160; &lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcviews/step1.png" /&gt; &lt;/p&gt;    &lt;p&gt;We think this will provide a useful way for developers to more easily create attractive, standards compliant, sites.&amp;#160; It will also hopefully encourage folks to create and share designs that can be easily re-used by others.&lt;/p&gt;    &lt;h3&gt;&lt;u&gt;Upcoming View Improvements with the Release Candidate&lt;/u&gt;&lt;/h3&gt;    &lt;p&gt;While on the topic of UI, I thought I'd also share a few details about some of the View-related improvements that are coming with the new ASP.NET MVC Release Candidate (RC) build that will be shipping shortly.&amp;#160; In addition to bug fixes, the release candidate incorporates a number of view-specific feature additions and community suggestions.&lt;/p&gt;    &lt;h4&gt;&lt;u&gt;Views without Code-Behind Files&lt;/u&gt;&lt;/h4&gt;    &lt;p&gt;Based on feedback from a lot of people, we've decided to make a change so that MVC view files by default do not have code-behind files. This change helps to reinforce the purpose of views in a MVC world (which are intended to be purely about rendering and to not contain any non-rendering related code), and for most people eliminates unused files in the project:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcviews/step2.png" /&gt; &lt;/p&gt;    &lt;p&gt;With the ASP.NET MVC Beta, developers could eliminate the code-behind file by using the &lt;a target="_blank" href="http://devlicio.us/blogs/tim_barcz/archive/2008/08/13/strongly-typed-viewdata-without-a-codebehind.aspx"&gt;CLR syntax for generic types in a view's inherits attribute&lt;/a&gt;, but that CLR syntax is (to put it mildly) pretty undiscoverable and hard to use.&amp;#160; The ASP.NET MVC team was able to combine a few extensibility features already in ASP.NET to now enable the standard VB/C# language syntax within the inherits attribute with the ASP.NET RC build:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcviews/step3.png" /&gt; &lt;/p&gt;    &lt;p&gt;One other nice benefit of not using a code-behind file is that you'll now get immediate intellisense when you first add them to the project.&amp;#160; With the beta you had to do a build/compile immediately after creating a view in order to get code intellisense within it.&amp;#160; The RC makes the workflow of adding and immediately editing a view compile-free and much more seamless.&lt;/p&gt;    &lt;h4&gt;&lt;u&gt;Top-Level Model Property on Views&lt;/u&gt;&lt;/h4&gt;    &lt;p&gt;With previous builds of ASP.NET MVC, you accessed the strongly typed model object passed to the view using the ViewData.Model property:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcviews/step4.png" /&gt; &lt;/p&gt;    &lt;p&gt;The above syntax still works, although now there is also a top-level &amp;quot;Model&amp;quot; property on ViewPage that you can use: &lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcviews/step5.png" /&gt; &lt;/p&gt;    &lt;p&gt;This property does the same thing as the previous code sample - its main benefit is that it allows you to write the code a little more concisely.&lt;/p&gt;    &lt;h4&gt;&lt;u&gt;HTML/AJAX Helpers Now Enable Expression Syntax&lt;/u&gt;&lt;/h4&gt;    &lt;p&gt;One of the requests a few people have asked for is the ability to use strongly-typed expression syntax (instead of using strings) when referring to the Model when using a View's HTML and AJAX helper objects. &lt;/p&gt;    &lt;p&gt;With the beta build of ASP.NET MVC this wasn't possible, since the HtmlHelper and AjaxHelper helper classes didn't expose the model type in their signature, and so people had to build helper methods directly off of the ViewPage&amp;lt;TModel&amp;gt; base class in order to achieve this.&amp;#160; The ASP.NET MVC RC build introduces new HtmlHelper&amp;lt;TModel&amp;gt; and AjaxHelper&amp;lt;TModel&amp;gt; types that are exposed on the ViewPage&amp;lt;TModel&amp;gt; base class.&amp;#160; These types now allow &lt;u&gt;&lt;em&gt;anyone&lt;/em&gt;&lt;/u&gt; to build strongly-typed HTML and AJAX helper extensions that use expression syntax to refer to the View's model.&lt;/p&gt;    &lt;p&gt;For example, I could build a (very simple) strongly-typed &amp;quot;TextBox&amp;quot; helper method using the code below:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcviews/step6.png" /&gt; &lt;/p&gt;    &lt;p&gt;And then use it within any of my views to bind against a Product model object like so:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcviews/step7.png" /&gt; &lt;/p&gt;    &lt;p&gt;Visual Studio will provide full intellisense for the strongly-typed expression syntax when working against the View's model in the source editor in this way:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcviews/step8.png" /&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;Note: the HTML helper extensions in the core ASP.NET MVC V1 assembly will still use the existing (non-expression based) syntax.&amp;#160; We are then planning to add expression-based versions to the MVCFutures assembly. You can of course also add your own helper methods (using either strings or strongly-typed expressions).&amp;#160; All of the built-in helper methods can also optionally be removed (because they are extension methods) if you want to replace or override them with your own.&lt;/p&gt;    &lt;h4&gt;&lt;u&gt;Scaffolding Support&lt;/u&gt;&lt;/h4&gt;    &lt;p&gt;The ASP.NET MVC RC build includes automatic &amp;quot;UI scaffolding&amp;quot; support when creating views using the new ASP.NET MVC &amp;quot;Add View&amp;quot; command inside Visual Studio.&amp;#160; The scaffolding support enables the automatic generation of views against any .NET type or object - meaning it can work against POCO classes, LINQ to SQL, LINQ to Entities, NHibernate, SubSonic, LLBLGen Pro, or any other object model. The scaffolding engine uses reflection to retrieve the public shape of a View's model type, and then passes it to a scaffolding template to populate appropriate markup based on it within the view being created. &lt;/p&gt;    &lt;p&gt;For example, assume we have a ProductsController class and want to create an &amp;quot;Edit&amp;quot; action on it to display an edit view of a particular Product.&amp;#160; Using the RC build we can right-click within our &amp;quot;Edit&amp;quot; action method and choose the &amp;quot;Add View&amp;quot; context menu command like so:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcviews/step9.png" /&gt; &lt;/p&gt;    &lt;p&gt;Within the &amp;quot;Add View&amp;quot; dialog we can then indicate that we are passing a &amp;quot;Product&amp;quot; type to our View:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcviews/step10.png" /&gt; &lt;/p&gt;    &lt;p&gt;We can indicate that we want an &amp;quot;Empty&amp;quot; view template created (like above), or indicate that we want VS to automatically scaffold a form &amp;quot;Edit&amp;quot; view for the Product object we are supplying:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcviews/step11.png" /&gt; &lt;/p&gt;    &lt;p&gt;If we choose the &amp;quot;Edit&amp;quot; template VS will automatically generate a file for us that has the appropriate HTML and validation helpers to create an editable form view:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcviews/step13.png" /&gt; &lt;/p&gt;    &lt;p&gt;We can then run the application and immediately get edit UI:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://www.scottgu.com/blogposts/mvcviews/step12.png" /&gt;&lt;/p&gt;    &lt;p&gt;We can then go in and change the generated edit.aspx file however we want to tweak/customize it.&amp;#160; &lt;/p&gt;    &lt;p&gt;One of the really nice things about the scaffolding system we are shipping is that it is implemented using Visual Studio's built-in T4 code generation system (Scott Hanselman has a nice post about this &lt;a target="_blank" href="http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx"&gt;here&lt;/a&gt;).&amp;#160; The &amp;quot;List&amp;quot;, &amp;quot;Edit&amp;quot;, &amp;quot;Create&amp;quot; and &amp;quot;Details&amp;quot; templates we ship with ASP.NET MVC can all be completely customized or replaced with T4 templates of your own (or downloaded from the ASP.NET MVC Design Gallery). So if you have your own particular way of creating HTML, or want to use custom HTML helpers (for example: strongly-typed expression based ones) you can update the default templates and the scaffolding system will use them going forward.&amp;#160; &lt;/p&gt;    &lt;p&gt;We are planning to enable the templates to be overriden both on a machine-wide level, as well as on a per-project level (so that you can check-in application-specific scaffolding templates under source control and share them across a team).&lt;/p&gt;    &lt;h4&gt;&lt;u&gt;MSBuild Task for Compiling Views&lt;/u&gt;&lt;/h4&gt;    &lt;p&gt;By default when you do a build on an ASP.NET MVC project it compiles all code within the project, except for the code within view files.&amp;#160; With the ASP.NET MVC Beta you had to roll your own MSBuild task if you wanted to compile the views.&amp;#160; The ASP.NET MVC RC build now includes a built-in MSBuild task that you can use to include views as part of the project compilation process.&amp;#160; This will verify the syntax and code included inline within all views and master pages for the application, and give you build errors if it encounters any problems.&lt;/p&gt;    &lt;p&gt;For performance reasons we don't recommend running this for quick compiles during development, but it is convenient to add to particular build configuration profiles (for example: staging and deployment) and/or for use with Build or CI (continuous integration) servers.&lt;/p&gt;    &lt;h4&gt;&lt;u&gt;Other ASP.NET MVC Release Candidate features coming&lt;/u&gt;&lt;/h4&gt;    &lt;p&gt;Above is a short list of some of the view-specific functionality coming with the release candidate build.&amp;#160; &lt;/p&gt;    &lt;p&gt;There are many other features and requests coming with the RC as well including: IDataErrorInfo support to enable models to surface validation error messages, as well as richer error validation extensibility to enable you to use your own approach to surface model validation errors to ModelBinders (the IDataErrorInfo support is built on top of this); new FileResult and JavaScriptResult ActionResult types (allowing you to more easily download files as well as executable JavaScript to browsers); built-in jQuery -vsdoc intellisense support; refactored AccontController support to enable easier unit testing and extensibility with form login scenarios; a variety of project template improvements, more extensibility everywhere; lots of bug fixes; and a few other cool features I'll blog about later once the RC is out.&lt;/p&gt;    &lt;p&gt;We'll be releasing the ASP.NET MVC Release Candidate in January.&amp;#160; Our plan is to have that build be ASP.NET MVC V1 API and feature-complete and have zero known bugs.&amp;#160; We'll give people a short period to upgrade to it, give it a good tire-kicking, and report any last minute issues they find.&amp;#160; We'll then ship the official V1 release shortly after that (so not far off now).&lt;/p&gt;    &lt;p&gt;Hope this helps,&lt;/p&gt;    &lt;p&gt;Scott&lt;/p&gt; &lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6797685" width="1" height="1"&gt;</content><author><name>ScottGu</name><uri>http://weblogs.asp.net/members/ScottGu.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/ASP.NET/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/scottgu/archive/tags/Visual+Studio/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/.NET/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/scottgu/archive/tags/Community+News/default.aspx" /><category term="MVC" scheme="http://weblogs.asp.net/scottgu/archive/tags/MVC/default.aspx" /></entry><entry><title>Dec 2nd Links: ASP.NET, ASP.NET Dynamic Data, ASP.NET AJAX, ASP.NET MVC, Visual Studio, Silverlight/WPF</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/scottgu/archive/2008/12/02/dec-2nd-links-asp-net-asp-net-dynamic-data-asp-net-ajax-asp-net-mvc-visual-studio-silverlight-wpf.aspx" /><id>http://weblogs.asp.net/scottgu/archive/2008/12/02/dec-2nd-links-asp-net-asp-net-dynamic-data-asp-net-ajax-asp-net-mvc-visual-studio-silverlight-wpf.aspx</id><published>2008-12-02T08:43:00Z</published><updated>2008-12-02T08:43:00Z</updated><content type="html">&lt;font size="2" face="arial"&gt;   &lt;p&gt;I'm flying out later today on a pretty intense business trip (22,000 miles, 5 countries, 3 continents, 1 week, no sleep... :-), so my blog activity over the next week and a half will be pretty light.&amp;#160; To keep you busy till I return, here is the latest in my &lt;a target="_blank" href="http://weblogs.asp.net/scottgu/archive/2008/11/06/nov-6th-links-asp-net-asp-net-ajax-jquery-asp-net-mvc-silverlight-and-wpf.aspx"&gt;link-listing series&lt;/a&gt;.&amp;#160; Also check out my &lt;a target="_blank" href="http://weblogs.asp.net/scottgu/pages/ASP.NET-2.0-Tips_2C00_-Tricks_2C00_-Recipes-and-Gotchas.aspx"&gt;ASP.NET Tips, Tricks and Tutorials page&lt;/a&gt; and &lt;a target="_blank" href="http://weblogs.asp.net/scottgu/pages/silverlight-posts.aspx"&gt;Silverlight Tutorials page&lt;/a&gt; for links to popular articles I've done myself in the past.&lt;/p&gt;    &lt;h3&gt;&lt;u&gt;ASP.NET&lt;/u&gt;&lt;/h3&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://www.hanselman.com/blog/TheWeeklySourceCode37GeolocationGeotargetingReverseIPAddressLookupInASPNETMVCMadeEasy.aspx"&gt;Geolocation/Geotargeting Reverse IP Lookup Code&lt;/a&gt;: Scott Hanselman has a cool sample that demonstrates how to perform IP address lookups on users visiting your site to determine where they are located on the globe (down to the latitude and longitude).&amp;#160; Pretty cool stuff.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://dotnetslackers.com/articles/aspnet/Tracking-User-Activity.aspx"&gt;Tracking User Activity&lt;/a&gt;: Scott Mitchell has a nice article that discusses how to track end-user activity when visiting an ASP.NET web site.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://mattberseth.com/blog/2008/10/itunes_data_grid_skin.html?source=feed"&gt;iTunes Data Grid Skin&lt;/a&gt;: Matt Berseth continues his cool series showing off cool new skins you can apply to ASP.NET controls (especially the GridView and DetailsView controls).&amp;#160; This post shows off a pretty sweet iTunes like skin.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/tess/archive/2008/11/06/troubleshooting-appdomain-restarts-and-other-issues-with-etw-tracing.aspx"&gt;Using ETW to Troubleshoot AppDomain Restarts and other Issues&lt;/a&gt;: Tess Ferrandez has another great post that demonstrates how to use the ETW tracing features built-into ASP.NET and Windows to trouble-shoot runtime issues.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;h3&gt;&lt;u&gt;ASP.NET Dynamic Data&lt;/u&gt;&lt;/h3&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://www.asp.net/learn/3.5-SP1/"&gt;ASP.NET Dynamic Data Videos:&lt;/a&gt; Joe Stagner has 6 nice ASP.NET Dynamic Data &amp;quot;How Do I?&amp;quot; videos posted on &lt;a target="_blank" href="http://www.asp.net"&gt;www.asp.net&lt;/a&gt; that you can check out to learn about the new ASP.NET Dynamic Data feature in .NET 3.5 SP1.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/davidebb/archive/2008/10/25/a-many-to-many-field-template-for-dynamic-data.aspx"&gt;A &amp;quot;Many to Many&amp;quot; field template for Dynamic Data&lt;/a&gt;: David Ebbo has a great post that talks about how to enable Many To Many scenarios with ASP.NET Dynamic Data.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://weblogs.asp.net/lduveau/archive/2008/11/28/customizing-asp-net-dynamic-data.aspx"&gt;Customizing ASP.NET Dynamic Data&lt;/a&gt; and &lt;a target="_blank" href="http://weblogs.asp.net/lduveau/archive/2008/12/01/asp-net-dynamic-data-customize-a-template-field.aspx"&gt;Customizing a Template Field&lt;/a&gt;: Laurent Duveau has two nice posts in a series he is doing on using ASP.NET Dynamic Data and customizing the UI generated from it.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://rachelappel.com/asp-net-dynamic-data/asp-net-dynamic-data-routing/"&gt;ASP.NET Dynamic Data Routing&lt;/a&gt;: Rachel Appel has a nice post that talks about how to use the new ASP.NET routing features with ASP.NET Dynamic Data to enable customized URLs.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/davidebb/archive/2008/11/26/fun-with-t4-templates-and-dynamic-data.aspx"&gt;Fun with T4 Templates and Dynamic Data:&lt;/a&gt; David Ebbo has a cool post on how to use the T4 templating engine built-into Visual Studio to automate ASP.NET Dynamic Data form generation.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/davidebb/archive/2008/11/25/using-user-controls-as-page-templates-in-dynamic-data.aspx"&gt;Using User Controls as Page Templates in Dynamic Data:&lt;/a&gt; David Ebbo has another nice post that talks about how to use user controls with ASP.NET Dynamic Data.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;h3&gt;&lt;u&gt;ASP.NET AJAX&lt;/u&gt;&lt;/h3&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://weblogs.asp.net/infinitiesloop/archive/2008/11/09/asp-net-ajax-4-0-observing-updates-to-pojos-plain-ole-javascript-objects.aspx"&gt;ASP.NET AJAX - Observing Updates to Plain Old JavaScript Objects:&lt;/a&gt; Dave Reed has a great blog post about one of the new features coming in ASP.NET AJAX - support for observing updates on plain old javascript objects.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://weblogs.asp.net/bleroy/archive/2008/10/17/using-the-power-of-binding-to-animate-changes.aspx"&gt;Using the Power of Binding to Animate Changes&lt;/a&gt;: Bertrand Le Roy has a nice post that talks about the new ASP.NET AJAX binding features coming and how you can use them with jQuery to animate changes.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://weblogs.asp.net/bleroy/archive/2008/11/28/instantiating-components-on-template-markup.aspx"&gt;Instantiating Components on template markup&lt;/a&gt;: Bertrand Le Roy has a nice post that talks about client-side AJAX templating approaches and some of the new features coming in ASP.NET AJAX.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://weblogs.asp.net/bleroy/archive/2008/11/21/putting-more-than-one-behavior-on-one-element.aspx"&gt;Putting more than one behavior on one element&lt;/a&gt; and &lt;a target="_blank" href="http://weblogs.asp.net/bleroy/archive/2008/11/22/getting-a-reference-to-a-behavior.aspx"&gt;Getting a Reference to a Behavior&lt;/a&gt;: Bertrand Le Roy has two nice articles that talk about how to use the client-side behaviors feature of ASP.NET AJAX.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://www.dotnetcurry.com/ShowArticle.aspx?ID=236"&gt;Check/Uncheck all Items in an ASP.NET Checkbox List using jQuery:&lt;/a&gt; A nice article by Suprotim Agarwal that shows how to write client-side jQuery code to enable check/uncheck for all items within a checkbox list.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;h3&gt;&lt;u&gt;ASP.NET MVC&lt;/u&gt;&lt;/h3&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx"&gt;How to Setup ASP.NET MVC on IIS6&lt;/a&gt;: Phil Haack has a great post that walks-through how to enable ASP.NET MVC on IIS6 servers (including how to enable it on a hosting server that you can't install anything on).&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://flux88.com/blog/fluent-route-testing-in-asp-net-mvc/"&gt;Fluent Route Testing in ASP.NET MVC&lt;/a&gt;: Ben Scheirman has a nice post where he blogs about new helper methods he is creating that make it easier to unit test ASP.NET MVC routes using a fluent API. &lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://farazt.blogspot.com/2008/10/autocomplete-using-jquery-mvc-and-json.html"&gt;Autocomplete using jQuery, ASP.NET MVC and JSON&lt;/a&gt;: Faraz Tabibian has a nice blog sample that demonstrates how to implement an autocomplete textbox using jQuery and ASP.NET MVC.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://weblogs.asp.net/mikebosch/archive/2008/11/25/hierarchical-treeview-with-asp-net-mvc-jquery.aspx"&gt;Hierarchical TreeView with ASP.NET MVC &amp;amp; jQuery&lt;/a&gt;: Mike Bosch has a cool sample that demonstrates how to add treeview UI to an ASP.NET MVC site using jQuery.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;h3&gt;&lt;u&gt;Visual Studio&lt;/u&gt;&lt;/h3&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://codeclimber.net.nz/archive/2008/11/27/mstest-tip-double-click-to-go-to-failing-test.aspx"&gt;MSTest Tip: Double-Click to Go to Failing Test&lt;/a&gt;: Simone Chiaretta has a cool tip that can speed up navigating to a test when it fails in the built-in VS 2008 unit test runner.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/saraford/archive/2008/11/26/did-you-know-how-to-add-a-linked-item-to-a-project-365.aspx"&gt;How to Add a Linked Item to a Project&lt;/a&gt;: Sara Ford has a nice post that talks about how to add linked items to your VS projects.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/webdevelopertips/archive/2008/11/25/tip-28-did-you-know-that-go-to-definition-is-supported-for-css-class.aspx"&gt;Go to Class Definition for CSS&lt;/a&gt;: Nice post from the VS web tools team that talks about the &amp;quot;Go To Class Definition&amp;quot; feature in VS 2008 for CSS.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/webdevelopertips/archive/2008/11/07/tip-21-did-you-know-how-to-set-a-fixed-port-for-the-developer-web-server.aspx"&gt;How to Set a fixed Port for the VS Development WebServer&lt;/a&gt;: Another nice post from the VS web tools team that discusses how to assign a fixed HTTP port to an ASP.NET project within Visual Studio.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;h3&gt;&lt;u&gt;WPF / Silverlight&lt;/u&gt;&lt;/h3&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://channel9.msdn.com/shows/Continuum/XAMLPowerToys/"&gt;XAML Power Toys - Instant Form Creation&lt;/a&gt;: Karl Shifflett has a great video that shows off his XAML Power Toys tool that integrates into Visual Studio and enables rapid forms creation for WPF and Silverlight.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://www.jeff.wilcox.name/2008/11/24/autocompletebox-missing-guide/"&gt;AutoCompleteBox Control - The Missing Guide&lt;/a&gt;: Jeff Wilcox has an awesome post that talks about the new Silverlight AutoCompleteBox control in the Silverlight Toolkit.&amp;#160; Very useful reading.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://www.hanselman.com/blog/TheWeeklySourceCode36PDCBabySmashAndSilverlightCharting.aspx"&gt;Silverlight Charting and BabySmash:&lt;/a&gt; Scott Hanselman has a cool post where he talks about how he integrated the new Silverlight Chart control with his BabySmash sample from his &lt;a target="_blank" href="http://channel9.msdn.com/pdc2008/TL49/"&gt;awesome talk at the PDC&lt;/a&gt;.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a target="_blank" href="http://www.codeplex.com/SilverlightValidator"&gt;Silverlight Validator &amp;amp; Input Toolkit&lt;/a&gt;: A really nice new CodePlex project that enables validation controls for Silverlight - making form input scenarios a lot easier.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;Hope this helps,&lt;/p&gt;    &lt;p&gt;Scott&lt;/p&gt; &lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6762530" width="1" height="1"&gt;</content><author><name>ScottGu</name><uri>http://weblogs.asp.net/members/ScottGu.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/ASP.NET/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/scottgu/archive/tags/Visual+Studio/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/scottgu/archive/tags/.NET/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/scottgu/archive/tags/Community+News/default.aspx" /><category term="Silverlight" scheme="http://weblogs.asp.net/scottgu/archive/tags/Silverlight/default.aspx" /><category term="Link Listing" scheme="http://weblogs.asp.net/scottgu/archive/tags/Link+Listing/default.aspx" /><category term="MVC" scheme="http://weblogs.asp.net/scottgu/archive/tags/MVC/default.aspx" /></entry></feed>