<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en" xml:base="http://amadiere.com/blog/wp-atom.php">
	<title type="text">Amadiere.com</title>
	<subtitle type="text">Blogging while collapsing through Meat Pie induced coding-fests...</subtitle>

	<updated>2011-08-30T21:42:45Z</updated>

	<link rel="alternate" type="text/html" href="http://amadiere.com/blog" />
	<id>http://amadiere.com/blog/feed/atom/</id>
	

	<generator uri="http://wordpress.org/" version="3.3.1">WordPress</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Amadiere" /><feedburner:info uri="amadiere" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
		<author>
			<name>Alex Holt</name>
						<uri>http://amadiere.com</uri>
					</author>
		<title type="html"><![CDATA[ASP.NET MVC 3: Drop Down Lists / SelectLists]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Amadiere/~3/BFrfQ1q905g/" />
		<id>http://amadiere.com/blog/?p=354</id>
		<updated>2011-08-30T21:42:45Z</updated>
		<published>2011-08-30T21:42:45Z</published>
		<category scheme="http://amadiere.com/blog" term="JQuery" /><category scheme="http://amadiere.com/blog" term="MVC" /><category scheme="http://amadiere.com/blog" term="ASP.NET MVC" />		<summary type="html"><![CDATA[Some ASP.NET MVC 3 guidelines on how to use the SelectList with the Html.DropDownListFor(). Including an extra part on theming it using JQuery.UI.SelectMenu
Related posts:<ol>
<li><a href='http://amadiere.com/blog/2011/06/unobtrusive-javascript-in-asp-net-mvc3-with-jquery/' rel='bookmark' title='Unobtrusive JavaScript in ASP.NET MVC3 with JQuery'>Unobtrusive JavaScript in ASP.NET MVC3 with JQuery</a> <small>I've recently experimented a little bit with some of the...</small></li>
</ol>]]></summary>
		<content type="html" xml:base="http://amadiere.com/blog/2011/08/asp-net-mvc-3-drop-down-lists-selectlists/">&lt;p&gt;There are a number of very useful helpers that come as default with the ASP.NET MVC framework, but one that always seems to get people confused is the Html.DropDownListFor() helper method. So in this post, I&amp;#8217;ll quickly go over the steps I use to populate the list, as well as some of the more funky features once it&amp;#8217;s up and running!&lt;/p&gt;
&lt;p&gt;In our example, there will simply be a single drop down list on a form that shows a list of countries, from which you can select and submit.&lt;/p&gt;
&lt;p&gt;First, we need to build a view model that is going to be the contract that determines the data that the view can display.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="csharp" style="font-family:monospace;"&gt;&lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold;"&gt;class&lt;/span&gt; IndexViewModel
&lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
    &lt;span style="color: #008080; font-style: italic;"&gt;// Stores the selected value from the drop down box.&lt;/span&gt;
    &lt;span style="color: #008000;"&gt;&amp;#91;&lt;/span&gt;Required&lt;span style="color: #008000;"&gt;&amp;#93;&lt;/span&gt;
    &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold;"&gt;int&lt;/span&gt; CountryID &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt; get&lt;span style="color: #008000;"&gt;;&lt;/span&gt; set&lt;span style="color: #008000;"&gt;;&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span style="color: #008080; font-style: italic;"&gt;// Contains the list of countries.&lt;/span&gt;
    &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; SelectList Countries &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt; get&lt;span style="color: #008000;"&gt;;&lt;/span&gt; set&lt;span style="color: #008000;"&gt;;&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Once we&amp;#8217;ve sorted that, we can create the action result methods for our index page.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="csharp" style="font-family:monospace;"&gt;&lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold;"&gt;class&lt;/span&gt; HomeController &lt;span style="color: #008000;"&gt;:&lt;/span&gt; Controller
&lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
    &lt;span style="color: #008000;"&gt;&amp;#91;&lt;/span&gt;HttpGet&lt;span style="color: #008000;"&gt;&amp;#93;&lt;/span&gt;
    &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; ActionResult Index&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
    &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
        IndexViewModel viewModel &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; IndexViewModel&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
        viewModel&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Countries&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; SelectList&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;GetCountries&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;, &lt;span style="color: #666666;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;, &lt;span style="color: #666666;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
        &lt;span style="color: #0600FF; font-weight: bold;"&gt;return&lt;/span&gt; View&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;viewModel&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
    &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span style="color: #008000;"&gt;&amp;#91;&lt;/span&gt;HttpPost&lt;span style="color: #008000;"&gt;&amp;#93;&lt;/span&gt;
    &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; ActionResult Index&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;IndexViewModel viewModel&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
    &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
        viewModel&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Countries&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; SelectList&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;GetCountries&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;, &lt;span style="color: #666666;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;, &lt;span style="color: #666666;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
        &lt;span style="color: #0600FF; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;!&lt;/span&gt;ModelState&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;IsValid&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
            &lt;span style="color: #0600FF; font-weight: bold;"&gt;return&lt;/span&gt; View&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;viewModel&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&amp;nbsp;
        &lt;span style="color: #008080; font-style: italic;"&gt;//TODO: Do something with the selected country...&lt;/span&gt;
        CMSService&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;UpdateCurrentLocation&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;viewModel&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CountryID&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&amp;nbsp;
        &lt;span style="color: #0600FF; font-weight: bold;"&gt;return&lt;/span&gt; View&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;viewModel&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
    &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You&amp;#8217;ll notice there are two instances where we populate the Countries property on the viewModel, one in the HttpGet method and the other in the HttpPost. We do this so that the list of countries is available throughout our process. You see, unlike the CountryID which is submitted as part of the Request object (it&amp;#8217;s part of the form collection), our list is never stored &amp;#8211; it&amp;#8217;s lost as soon as the user navigates away from that page. So we need to repopulate it. In reality, you may only need to repopulate it when the validation fails an you have to redraw the screen in the HttpPost method, so that could be moved.&lt;/p&gt;
&lt;p&gt;Then, it&amp;#8217;s just a simple case of adding this to my view:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="csharp" style="font-family:monospace;"&gt;@Html&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;DropDownListFor&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;x &lt;span style="color: #008000;"&gt;=&amp;gt;&lt;/span&gt; x&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CountryID&lt;/span&gt;, Model&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Countries&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Or you could forcably add a blank value to the top with some &amp;#8220;please select me, pretty please&amp;#8221;-type text. e.g.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="csharp" style="font-family:monospace;"&gt;@Html&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;DropDownListFor&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;x &lt;span style="color: #008000;"&gt;=&amp;gt;&lt;/span&gt; x&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CountryID&lt;/span&gt;, Model&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Countries&lt;/span&gt;, &lt;span style="color: #666666;"&gt;&amp;quot;- please select -&amp;quot;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And there you have it! A working drop down box using MVC 3 and Razor views.&lt;br /&gt;
Now for some more fancy stuff. If you&amp;#8217;re interested in styling your menu, then you can&amp;#8217;t really go far wrong with&lt;a href="http://github.com/fnagel/jquery-ui"&gt; jQuery UI SelectMenu&lt;/a&gt; (of which there are &lt;a href="http://www.filamentgroup.com/lab/jquery_ui_selectmenu_an_aria_accessible_plugin_for_styling_a_html_select/"&gt;a few demos available, as well as a separate tutorial&lt;/a&gt;). To set up, you only need to do a few things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Download JQuery &amp;#038; JQueryUI and add to your solution. You can now do this step through NuGet, or manually by &amp;#8220;Add Existing Item&amp;#8221; and downloading from the respective site.&lt;/li&gt;
&lt;li&gt;Add a reference to the .js and .css files to the header of your html header, often set by the _Layout.cshtml file. Something like the following:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="html4strict" style="font-family:monospace;"&gt;   &lt;span style="color: #009900;"&gt;&amp;lt;&lt;span style="color: #000000; font-weight: bold;"&gt;link&lt;/span&gt; &lt;span style="color: #000066;"&gt;type&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt; &lt;span style="color: #000066;"&gt;rel&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;stylesheet&amp;quot;&lt;/span&gt; &lt;span style="color: #000066;"&gt;href&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;@Url.Content(&amp;quot;&lt;/span&gt;~&lt;span style="color: #66cc66;"&gt;/&lt;/span&gt;&lt;span style="color: #000066;"&gt;Content&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;/&lt;/span&gt;themes&lt;span style="color: #66cc66;"&gt;/&lt;/span&gt;base&lt;span style="color: #66cc66;"&gt;/&lt;/span&gt;jquery.ui.all.css&lt;span style="color: #ff0000;"&gt;&amp;quot;)&amp;quot;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;/&lt;/span&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: #009900;"&gt;&amp;lt;&lt;span style="color: #000000; font-weight: bold;"&gt;script&lt;/span&gt; &lt;span style="color: #000066;"&gt;type&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color: #000066;"&gt;src&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;@Url.Content(&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style="color: #66cc66;"&gt;/&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;script&lt;/span&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: #009900;"&gt;&amp;lt;&lt;span style="color: #000000; font-weight: bold;"&gt;script&lt;/span&gt; &lt;span style="color: #000066;"&gt;type&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color: #000066;"&gt;src&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;@Url.Content(&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style="color: #66cc66;"&gt;/&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;script&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Download and add the SelectMenu .js and .css files in much the same way.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="html4strict" style="font-family:monospace;"&gt;&lt;span style="color: #009900;"&gt;&amp;lt;&lt;span style="color: #000000; font-weight: bold;"&gt;link&lt;/span&gt; &lt;span style="color: #000066;"&gt;type&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt; &lt;span style="color: #000066;"&gt;rel&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;stylesheet&amp;quot;&lt;/span&gt; &lt;span style="color: #000066;"&gt;href&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;@Url.Content(&amp;quot;&lt;/span&gt;~&lt;span style="color: #66cc66;"&gt;/&lt;/span&gt;&lt;span style="color: #000066;"&gt;Content&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;/&lt;/span&gt;selectmenu.css&lt;span style="color: #ff0000;"&gt;&amp;quot;)&amp;quot;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;/&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&amp;lt;&lt;span style="color: #000000; font-weight: bold;"&gt;script&lt;/span&gt; &lt;span style="color: #000066;"&gt;src&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;@Url.Content(&amp;quot;&lt;/span&gt;~&lt;span style="color: #66cc66;"&gt;/&lt;/span&gt;Scripts&lt;span style="color: #66cc66;"&gt;/&lt;/span&gt;selectmenu.js&lt;span style="color: #ff0000;"&gt;&amp;quot;)&amp;quot;&lt;/span&gt; &lt;span style="color: #000066;"&gt;type&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style="color: #66cc66;"&gt;/&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;script&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Then all that lies to do is to set it off going:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="html4strict" style="font-family:monospace;"&gt;&lt;span style="color: #009900;"&gt;&amp;lt;&lt;span style="color: #000000; font-weight: bold;"&gt;script&lt;/span&gt; &lt;span style="color: #000066;"&gt;type&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
   $('select').selectmenu();
&lt;span style="color: #009900;"&gt;&amp;lt;&lt;span style="color: #66cc66;"&gt;/&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;script&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The last bit we added there simply makes this apply for every single select box that is on the page. As an aside, when doing AJAX or JQuery where you may potentially add an additional drop down list, you will need to call &lt;code&gt;.selectmenu()&lt;/code&gt; to ensure that your new box appears like the others. It&amp;#8217;s also worth noting that you may find if your page isn&amp;#8217;t a fast loader, the standard drop down box (unstyled) will appear for a brief period.&lt;/p&gt;
&lt;p&gt;Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://amadiere.com/blog/2011/06/unobtrusive-javascript-in-asp-net-mvc3-with-jquery/' rel='bookmark' title='Unobtrusive JavaScript in ASP.NET MVC3 with JQuery'&gt;Unobtrusive JavaScript in ASP.NET MVC3 with JQuery&lt;/a&gt; &lt;small&gt;I've recently experimented a little bit with some of the...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Dw9slALInFXDus-SwLtuIfIagH4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Dw9slALInFXDus-SwLtuIfIagH4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Dw9slALInFXDus-SwLtuIfIagH4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Dw9slALInFXDus-SwLtuIfIagH4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Amadiere/~4/BFrfQ1q905g" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://amadiere.com/blog/2011/08/asp-net-mvc-3-drop-down-lists-selectlists/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://amadiere.com/blog/2011/08/asp-net-mvc-3-drop-down-lists-selectlists/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://amadiere.com/blog/2011/08/asp-net-mvc-3-drop-down-lists-selectlists/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alex Holt</name>
						<uri>http://amadiere.com</uri>
					</author>
		<title type="html"><![CDATA[Unobtrusive JavaScript in ASP.NET MVC3 with JQuery]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Amadiere/~3/1CykcsnnQbU/" />
		<id>http://amadiere.com/blog/?p=343</id>
		<updated>2011-06-20T20:45:10Z</updated>
		<published>2011-06-20T20:45:10Z</published>
		<category scheme="http://amadiere.com/blog" term="ASP.NET" /><category scheme="http://amadiere.com/blog" term="C#" /><category scheme="http://amadiere.com/blog" term="HTML" /><category scheme="http://amadiere.com/blog" term="JQuery" /><category scheme="http://amadiere.com/blog" term="MVC" /><category scheme="http://amadiere.com/blog" term="Ajax" /><category scheme="http://amadiere.com/blog" term="ASP.NET MVC" /><category scheme="http://amadiere.com/blog" term="JavaScript" /><category scheme="http://amadiere.com/blog" term="Unobtrusive" /><category scheme="http://amadiere.com/blog" term="Validate" />		<summary type="html"><![CDATA[I've recently experimented a little bit with some of the new unobtrusive JavaScript stuff that is now included as part of the default ASP.NET MVC 3 project template. While not an overly complex subject, it's been one of them plugins I wanted to have a dabble with, but I didn't quite find the time until now. And I must say, it was a lot easier to sort out than I thought it might be! 
Related posts:<ol>
<li><a href='http://amadiere.com/blog/2011/08/asp-net-mvc-3-drop-down-lists-selectlists/' rel='bookmark' title='ASP.NET MVC 3: Drop Down Lists / SelectLists'>ASP.NET MVC 3: Drop Down Lists / SelectLists</a> <small>Some ASP.NET MVC 3 guidelines on how to use the...</small></li>
</ol>]]></summary>
		<content type="html" xml:base="http://amadiere.com/blog/2011/06/unobtrusive-javascript-in-asp-net-mvc3-with-jquery/">&lt;p&gt;I&amp;#8217;ve recently experimented a little bit with some of the new unobtrusive JavaScript stuff that is now included as part of the default ASP.NET MVC 3 project template. While not an overly complex subject, it&amp;#8217;s been one of them plugins I wanted to have a dabble with, but I didn&amp;#8217;t quite find the time until now. And I must say, it was a lot easier to sort out than I thought it might be! I should point out that although this is an ASP.NET MVC 3 example, the concepts and the fact that this is mostly just JQuery means that it&amp;#8217;s not limited to that, earlier versions of ASP.NET MVC can use happily, as can WebForms, PHP, Ruby and even Classic ASP!&lt;/p&gt;
&lt;p&gt;Some things we&amp;#8217;ll try and do in this blog post:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Setup a simple form with server-side validation of input fields which redirects to a &amp;#8216;Success&amp;#8217; page or re-renders the form depending on whether it was successful or not.&lt;/li&gt;
&lt;li&gt;Add JQuery validation for simple client side validation to the form.&lt;/li&gt;
&lt;li&gt;Add Unobtrusive JavaScript support which will submit the form via AJAX.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Creating a basic application:&lt;/p&gt;
&lt;p&gt;Firstly, I created a ASP.NET MVC 3 Web Application (Empty) in VS2010 and got to work updating the JavaScript libraries that were in it. This can be done via the NuGet Console, or by right clicking &amp;#8220;References&amp;#8221; in the Solution Explorer, &amp;#8220;Add Library Reference&amp;#8221; and then clicking the update side-tab. From there you can update all the default stuff.&lt;/p&gt;
&lt;p&gt;Done that? Good. Next we&amp;#8217;ll add a default controller, a view model to pass the data around &amp;amp; two views (one for allowing us to edit the form and the other as a success page). It&amp;#8217;s worth noting that I&amp;#8217;m doing nothing that special on these and that I&amp;#8217;m using the default _Layout.cshtml to apply the header and footer as it sees fit.&lt;/p&gt;
&lt;p&gt;/Controllers/BlackCoffeeController.cs&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="csharp" style="font-family:monospace;"&gt;&lt;span style="color: #0600FF; font-weight: bold;"&gt;using&lt;/span&gt; &lt;span style="color: #008080;"&gt;System.Web.Mvc&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&lt;span style="color: #0600FF; font-weight: bold;"&gt;using&lt;/span&gt; &lt;span style="color: #008080;"&gt;UnobtrusiveAjaxExample.ViewModels.BlackCoffee&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #0600FF; font-weight: bold;"&gt;namespace&lt;/span&gt; UnobtrusiveAjaxExample&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Controllers&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
    &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold;"&gt;class&lt;/span&gt; BlackCoffeeController &lt;span style="color: #008000;"&gt;:&lt;/span&gt; Controller
    &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
        &lt;span style="color: #008000;"&gt;&amp;#91;&lt;/span&gt;HttpGet&lt;span style="color: #008000;"&gt;&amp;#93;&lt;/span&gt;
        &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; ActionResult Rocks&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
        &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
            RocksViewModel viewModel &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; RocksViewModel&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
            &lt;span style="color: #0600FF; font-weight: bold;"&gt;return&lt;/span&gt; View&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;viewModel&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
        &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
        &lt;span style="color: #008000;"&gt;&amp;#91;&lt;/span&gt;HttpPost&lt;span style="color: #008000;"&gt;&amp;#93;&lt;/span&gt;
        &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; ActionResult Rocks&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;RocksViewModel viewModel&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
        &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
            &lt;span style="color: #0600FF; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;!&lt;/span&gt;ModelState&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;IsValid&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0600FF; font-weight: bold;"&gt;return&lt;/span&gt; View&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;viewModel&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
            &lt;span style="color: #008080; font-style: italic;"&gt;// Do something Database-y here.&lt;/span&gt;
            &lt;span style="color: #0600FF; font-weight: bold;"&gt;return&lt;/span&gt; View&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #666666;"&gt;&amp;quot;Success&amp;quot;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
        &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
    &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;/ViewModels/BlackCoffee/RocksViewModel.cs&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="csharp" style="font-family:monospace;"&gt;&lt;span style="color: #0600FF; font-weight: bold;"&gt;using&lt;/span&gt; &lt;span style="color: #008080;"&gt;System.ComponentModel.DataAnnotations&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #0600FF; font-weight: bold;"&gt;namespace&lt;/span&gt; UnobtrusiveAjaxExample&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ViewModels&lt;/span&gt;&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;BlackCoffee&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
    &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold;"&gt;class&lt;/span&gt; RocksViewModel
    &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
        &lt;span style="color: #008000;"&gt;&amp;#91;&lt;/span&gt;Required&lt;span style="color: #008000;"&gt;&amp;#93;&lt;/span&gt;
        &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold;"&gt;string&lt;/span&gt; Forename &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt; get&lt;span style="color: #008000;"&gt;;&lt;/span&gt; set&lt;span style="color: #008000;"&gt;;&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
        &lt;span style="color: #008000;"&gt;&amp;#91;&lt;/span&gt;Required&lt;span style="color: #008000;"&gt;&amp;#93;&lt;/span&gt;
        &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold;"&gt;string&lt;/span&gt; Surname &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt; get&lt;span style="color: #008000;"&gt;;&lt;/span&gt; set&lt;span style="color: #008000;"&gt;;&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
        &lt;span style="color: #008000;"&gt;&amp;#91;&lt;/span&gt;Required&lt;span style="color: #008000;"&gt;&amp;#93;&lt;/span&gt;
        &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold;"&gt;string&lt;/span&gt; Message &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt; get&lt;span style="color: #008000;"&gt;;&lt;/span&gt; set&lt;span style="color: #008000;"&gt;;&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
    &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Then the two views, firstly: /Views/BlackCoffee/Rocks.cshtml&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="csharp" style="font-family:monospace;"&gt;@model UnobtrusiveAjaxExample&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ViewModels&lt;/span&gt;&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;BlackCoffee&lt;/span&gt;&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;RocksViewModel&lt;/span&gt;
&amp;nbsp;
@&lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
    ViewBag&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Title&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;"&gt;&amp;quot;Rocks&amp;quot;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;lt;&lt;/span&gt;h2&lt;span style="color: #008000;"&gt;&amp;gt;&lt;/span&gt;Black Coffee Rocks&lt;span style="color: #008000;"&gt;?&amp;lt;/&lt;/span&gt;h2&lt;span style="color: #008000;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;lt;&lt;/span&gt;div id&lt;span style="color: #008000;"&gt;=&lt;/span&gt;&lt;span style="color: #666666;"&gt;&amp;quot;content&amp;quot;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;gt;&lt;/span&gt;
@Html&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ValidationSummary&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
@&lt;span style="color: #0600FF; font-weight: bold;"&gt;using&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;Html&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;BeginForm&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;lt;&lt;/span&gt;ul&lt;span style="color: #008000;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color: #008000;"&gt;&amp;lt;&lt;/span&gt;li&lt;span style="color: #008000;"&gt;&amp;gt;&lt;/span&gt;
            @Html&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;LabelFor&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;x &lt;span style="color: #008000;"&gt;=&amp;gt;&lt;/span&gt; x&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Forename&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
            @Html&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;EditorFor&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;x &lt;span style="color: #008000;"&gt;=&amp;gt;&lt;/span&gt; x&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Forename&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
            @Html&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ValidationMessageFor&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;x &lt;span style="color: #008000;"&gt;=&amp;gt;&lt;/span&gt; x&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Forename&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
        &lt;span style="color: #008000;"&gt;&amp;lt;/&lt;/span&gt;li&lt;span style="color: #008000;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color: #008000;"&gt;&amp;lt;&lt;/span&gt;li&lt;span style="color: #008000;"&gt;&amp;gt;&lt;/span&gt;
            @Html&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;LabelFor&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;x &lt;span style="color: #008000;"&gt;=&amp;gt;&lt;/span&gt; x&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Surname&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
            @Html&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;EditorFor&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;x &lt;span style="color: #008000;"&gt;=&amp;gt;&lt;/span&gt; x&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Surname&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
            @Html&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ValidationMessageFor&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;x &lt;span style="color: #008000;"&gt;=&amp;gt;&lt;/span&gt; x&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Surname&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
        &lt;span style="color: #008000;"&gt;&amp;lt;/&lt;/span&gt;li&lt;span style="color: #008000;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color: #008000;"&gt;&amp;lt;&lt;/span&gt;li&lt;span style="color: #008000;"&gt;&amp;gt;&lt;/span&gt;
            @Html&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;LabelFor&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;x &lt;span style="color: #008000;"&gt;=&amp;gt;&lt;/span&gt; x&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Message&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
            @Html&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;EditorFor&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;x &lt;span style="color: #008000;"&gt;=&amp;gt;&lt;/span&gt; x&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Message&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
            @Html&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ValidationMessageFor&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;x &lt;span style="color: #008000;"&gt;=&amp;gt;&lt;/span&gt; x&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Message&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
        &lt;span style="color: #008000;"&gt;&amp;lt;/&lt;/span&gt;li&lt;span style="color: #008000;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;lt;/&lt;/span&gt;ul&lt;span style="color: #008000;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;lt;&lt;/span&gt;div&lt;span style="color: #008000;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;input name&lt;span style="color: #008000;"&gt;=&lt;/span&gt;&lt;span style="color: #666666;"&gt;&amp;quot;Continue&amp;quot;&lt;/span&gt; type&lt;span style="color: #008000;"&gt;=&lt;/span&gt;&lt;span style="color: #666666;"&gt;&amp;quot;submit&amp;quot;&lt;/span&gt; value&lt;span style="color: #008000;"&gt;=&lt;/span&gt;&lt;span style="color: #666666;"&gt;&amp;quot;Continue&amp;quot;&lt;/span&gt; &lt;span style="color: #008000;"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;div&lt;span style="color: #008000;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;lt;/&lt;/span&gt;div&lt;span style="color: #008000;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;And then /Views/BlackCoffee/Success.cshtml&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="csharp" style="font-family:monospace;"&gt;@&lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
    ViewBag&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Title&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;"&gt;&amp;quot;Success&amp;quot;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;lt;&lt;/span&gt;h2&lt;span style="color: #008000;"&gt;&amp;gt;&lt;/span&gt;Success&lt;span style="color: #008000;"&gt;&amp;lt;/&lt;/span&gt;h2&lt;span style="color: #008000;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;lt;&lt;/span&gt;p&lt;span style="color: #008000;"&gt;&amp;gt;&lt;/span&gt;Congratulations&lt;span style="color: #008000;"&gt;!&lt;/span&gt; You&lt;span style="color: #666666;"&gt;'ve successfully declared BLack Coffee as being totally rockin'&lt;/span&gt;&lt;span style="color: #008000;"&gt;!&amp;lt;/&lt;/span&gt;p&lt;span style="color: #008000;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;At this point now, you should be able to build and run your application and navigate to /BlackCoffee/Rocks and verify that the page redraws the form unless all boxes are filled in. If you do fill them all in, you should get the success page.&lt;/p&gt;
&lt;p&gt;Adding JQuery Validation with barely any effort for standard Data Annotations.&lt;/p&gt;
&lt;p&gt;With certain DataAnnotations such as the [Required] attribute and [StringLength], you should be able to get simple JQuery client side checks, which while not a replacement for server side checks, add some speedy feedback which will be especially welcomed by users who find themselves struggling over long distance or slow connections. The key point to note here is that the checks are performed both sides (client and server) &amp;#8211; so it doesn&amp;#8217;t matter if the user has JavaScript disabled or is using a browser not capable of running it &amp;#8211; the checks will still get done. It&amp;#8217;s just an added bonus.&lt;/p&gt;
&lt;p&gt;To do, simply add references to the JavaScript files to your html&amp;#8217;s &amp;lt;head&amp;gt; tag. In this case, I&amp;#8217;m going to add them directly to the _Layout.cshtml file.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;6
7
8
9
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="html" style="font-family:monospace;"&gt;    &amp;lt;script src=&amp;quot;@Url.Content(&amp;quot;~/Scripts/jquery-1.6.1.min.js&amp;quot;)&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script src=&amp;quot;@Url.Content(&amp;quot;~/Scripts/jquery.validate.min.js&amp;quot;)&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script src=&amp;quot;@Url.Content(&amp;quot;~/Scripts/jquery.validate.unobtrusive.min.js&amp;quot;)&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script src=&amp;quot;@Url.Content(&amp;quot;~/Scripts/jquery.unobtrusive-ajax.min.js&amp;quot;)&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You&amp;#8217;ll spot that there are 4 included files there &amp;#8211; the last one (the JQuery.unobtrusive-ajax.min.js) is for the next part &amp;#8211; but we&amp;#8217;ll put it in now in preparation.&lt;/p&gt;
&lt;p&gt;You should find that the Web.Config file already has the following lines in already (specifically lines 10 &amp;amp; 11), but have a gander for the following and if it doesn&amp;#8217;t exist or is set different to this, update the file appropriately.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;8
9
10
11
12
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="cshtml" style="font-family:monospace;"&gt;&amp;lt;appSettings&amp;gt;
    &amp;lt;add key=&amp;quot;webpages:Version&amp;quot; value=&amp;quot;1.0.0.0&amp;quot;/&amp;gt;
    &amp;lt;add key=&amp;quot;ClientValidationEnabled&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;
    &amp;lt;add key=&amp;quot;UnobtrusiveJavaScriptEnabled&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;
&amp;lt;/appSettings&amp;gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We&amp;#8217;re now cooking with gas! Save, Build and try out your application. You should be able to spot that when clicking your submit button, the page doesn&amp;#8217;t go away to the server at all to check the field validates, it&amp;#8217;s doing it on the client. Good stuff!&lt;/p&gt;
&lt;p&gt;Adding Unobtrusive AJAX into the mix.&lt;/p&gt;
&lt;p&gt;This should be a relatively easy process, but there are a few things we need to consider sorting out before we continue too much further:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Update the views to make the Form work via AJAX (without breaking non-JavaScript/AJAX support)&lt;/li&gt;
&lt;li&gt;Update the controller to detect whether the request is an AJAX request and if so, avoid sending the header / footer / other stuff back with it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The first part is quite simple. Within the Rocks.cshtml we created earlier which is our edit form view, we used the HtmlHelper class to create the form tag. All we need to do now is change that to use the AjaxHelper class and pass in some options and we&amp;#8217;re off to a winner!&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;10
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="cshtml" style="font-family:monospace;"&gt;@using(Ajax.BeginForm(new AjaxOptions() { HttpMethod = &amp;quot;Post&amp;quot;, UpdateTargetId = &amp;quot;content&amp;quot; }))&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You should be able to see there that there is AjaxOptions class &amp;#8220;newed up&amp;#8221; directly in the view. If you&amp;#8217;re uncomfortable with doing this, you could create it directly in the view model and pass it in from there. There are a ton of options that you can go into, most of which are touched upon &lt;a href="http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-ajax.html"&gt;on Brad Wilson&amp;#8217;s blog post&lt;/a&gt; on this subject (if you haven&amp;#8217;t read &lt;a href="http://bradwilson.typepad.com/blog/"&gt;Brad Wilson&amp;#8217;s blog&lt;/a&gt;, you probably should add it to your reader &amp;#8211; it&amp;#8217;s exceptional and includes a good chuck of stuff relating to ASP.NET MVC and related topics). You&amp;#8217;ll also spot we provide a UpdateTargetId &amp;#8211; this represents the HTML element into which all the view result is going to get dumped into. In this case, our DIV on our Rocks.cshtml page &amp;#8211; but this could be anything and in fact nothing, if you don&amp;#8217;t want to spew out content back to the user for whatever reason.&lt;/p&gt;
&lt;p&gt;If you ran the application now, you&amp;#8217;d find that all the AJAX and the JQuery would work great, but as part of the Ajax Request, the header and footer would be returned and very soon you&amp;#8217;d end up with a webpage that looks like it&amp;#8217;s been designed by someone who&amp;#8217;s been watching Inception too much. This thankfully (or more specifically thanks to the ASP.NET team), isn&amp;#8217;t a problem as we can do a little check before returning the view while in the appropriate controller method. Using the example above, you&amp;#8217;d be able to change it to something like this:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;15
16
17
18
19
20
21
22
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="csharp" style="font-family:monospace;"&gt;        &lt;span style="color: #008000;"&gt;&amp;#91;&lt;/span&gt;HttpPost&lt;span style="color: #008000;"&gt;&amp;#93;&lt;/span&gt;
        &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; ActionResult Rocks&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;RocksViewModel viewModel&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
        &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
            &lt;span style="color: #0600FF; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;!&lt;/span&gt;ModelState&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;IsValid&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0600FF; font-weight: bold;"&gt;return&lt;/span&gt; View&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;viewModel&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
            &lt;span style="color: #008080; font-style: italic;"&gt;// Do something Database-y here.&lt;/span&gt;
            &lt;span style="color: #0600FF; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;Request&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;IsAjaxRequest&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0600FF; font-weight: bold;"&gt;return&lt;/span&gt; PartialView&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #666666;"&gt;&amp;quot;Success&amp;quot;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
            &lt;span style="color: #0600FF; font-weight: bold;"&gt;return&lt;/span&gt; View&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #666666;"&gt;&amp;quot;Success&amp;quot;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
        &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You&amp;#8217;ll spot with this example we are returning exactly the same view. However, by returning it as a Partial view, we are ensuring it does not get rendered as part of a bigger page, so all of the headers / footers and other things included via layout pages are ignored.&lt;/p&gt;
&lt;p&gt;Other things you can do to improve stuff:&lt;/p&gt;
&lt;p&gt;There are a plenty of other very easy things you can add too, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Loading image: Simply provide it with a content div to display while loading (and a timeout if you want) and in will show() that while that particular AJAX call is made. Meaning that if you want to, you can lock the UI or provide visual feedback that the users request is currently in progress.&lt;/li&gt;
&lt;li&gt;There are four callback methods you can set for OnBegin, OnSuccess, OnFailure and OnCompleted which will trigger as appropriate. This allows you to add all sorts of extra functionality to the application in those instances you want to do more than simply &amp;#8220;add some HTML to a div&amp;#8221;. However, two things to note regarding these function calls:
&lt;ul&gt;
&lt;li&gt;The functions you declare should &lt;strong&gt;not&lt;/strong&gt; live inside of the JQuery document.ready() method or other shorthand notation for that. Just plain functions in a .js file is fine (though, you can of course, still use JQuery &amp;#8211; that&amp;#8217;s not a problem).&lt;/li&gt;
&lt;li&gt;You might find that the $(this) object within the JavaScript is not populated by the time you get to the methods. You can solve this to some degree by changing the following line from:

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;244
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="js" style="font-family:monospace;"&gt;        options.data.push({ name: &amp;quot;X-Requested-With&amp;quot;, value: &amp;quot;XMLHttpRequest&amp;quot; });&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;244
245
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="js" style="font-family:monospace;"&gt;        options.data.push({ name: &amp;quot;X-Requested-With&amp;quot;, value: &amp;quot;XMLHttpRequest&amp;quot; });
        options.context = element;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If I&amp;#8217;m honest, I don&amp;#8217;t know why this line is missing from the file in the first place. I can&amp;#8217;t imagine it&amp;#8217;s just been forgotten as it seems like such a key thing to be able to trigger events based on the click events (especially on pages where there are lots of controls which may call the AJAX request). I suspect there is a good reason &amp;#8211; but I don&amp;#8217;t know it yet.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;You can use this on more than just &amp;lt;form&amp;gt; tags. For example, it&amp;#8217;s just as easy to use the Ajax.ActionLink method which works in a very similar way and has some of your favourite overloads still available!&lt;/li&gt;
&lt;li&gt;As mentioned at the top, this is mostly just JavaScript. If you wanted to do this with any other server side technology, all you&amp;#8217;d need to do is replace the AjaxHelper methods with your own way of outputting the specific HTML &amp;#8220;data-&amp;#8221; based attributes and you&amp;#8217;re up and running!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;a href="amadiere.com/downloads/UnobtrusiveAjaxExample.7z"&gt;full source code is available in a zip file here&lt;/a&gt; &amp;#8211; though, as you can see above &amp;#8211; it&amp;#8217;s not a great deal different to the bog standard project!&lt;/p&gt;
&lt;p&gt;Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://amadiere.com/blog/2011/08/asp-net-mvc-3-drop-down-lists-selectlists/' rel='bookmark' title='ASP.NET MVC 3: Drop Down Lists / SelectLists'&gt;ASP.NET MVC 3: Drop Down Lists / SelectLists&lt;/a&gt; &lt;small&gt;Some ASP.NET MVC 3 guidelines on how to use the...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GpsjM9Ak4okDIUOYzypVWMZCy50/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GpsjM9Ak4okDIUOYzypVWMZCy50/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GpsjM9Ak4okDIUOYzypVWMZCy50/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GpsjM9Ak4okDIUOYzypVWMZCy50/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Amadiere/~4/1CykcsnnQbU" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://amadiere.com/blog/2011/06/unobtrusive-javascript-in-asp-net-mvc3-with-jquery/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://amadiere.com/blog/2011/06/unobtrusive-javascript-in-asp-net-mvc3-with-jquery/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://amadiere.com/blog/2011/06/unobtrusive-javascript-in-asp-net-mvc3-with-jquery/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alex Holt</name>
						<uri>http://amadiere.com</uri>
					</author>
		<title type="html"><![CDATA[The 10 Best YouTube Video&#8217;s (Even Better Than That Other List You Read)]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Amadiere/~3/NKFVMz0TN_g/" />
		<id>http://amadiere.com/blog/?p=339</id>
		<updated>2011-03-04T21:48:26Z</updated>
		<published>2011-03-04T21:48:26Z</published>
		<category scheme="http://amadiere.com/blog" term="Internet" /><category scheme="http://amadiere.com/blog" term="Jokes" />		<summary type="html"><![CDATA[Right, I know you read about all these other lists of "top 10 videos ever" blah-blah! But seriously. They never seem to satisfy me. They always leave out the ones that I think were freakin' amazing. So, in true "OMG! Sum1 on the Intert00bs is wong!!one!"... here is my subtle attempt at bashing them.
No related posts.]]></summary>
		<content type="html" xml:base="http://amadiere.com/blog/2011/03/the-10-best-youtube-videos-even-better-than-that-other-list-you-read/">&lt;p&gt;Right, I know you read about all these other lists of &amp;#8220;top 10 videos ever&amp;#8221; blah-blah! But seriously. They never seem to satisfy me. They always leave out the ones that I think were freakin&amp;#8217; amazing. So, in true &amp;#8220;OMG! Sum1 on the Intert00bs is wong!!one!&amp;#8221;&amp;#8230; here is my subtle attempt at bashing them.&lt;/p&gt;
&lt;p&gt;Firstly, an honorable mention for &lt;a href="http://www.youtube.com/watch?v=KmtzQCSh6xk"&gt;Numa Numa&lt;/a&gt; &amp;#8211;  a classic bizarre video from long before the realms of YouTube! Additionally &amp;#8211; &lt;a href="http://www.youtube.com/watch?v=_OBlgSz8sSM"&gt;Charlie&lt;/a&gt; and &lt;a href="http://www.youtube.com/watch?v=RxPZh4AnWyk"&gt;Susan Boyle&lt;/a&gt; (both of the YouTube era), although not my favourites &amp;#8211; do get a hat tip for being interesting for a watch at least once.&lt;/p&gt;
&lt;p&gt;But now, in reverse order &amp;#8211; the top 10!&lt;/p&gt;
&lt;h2&gt;10 &amp;#8211; &lt;a href="http://www.youtube.com/watch?v=YQ4j-MBnLQo"&gt;Ring, Ring, Ring, Ring, Ring, Ring, Ring: Banana Phone!&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is truely, truely the most frusting song on the internet. Once you&amp;#8217;ve heard it, you cannot get it out of your head for the rest of the day.&lt;/p&gt;
&lt;h2&gt;9 &amp;#8211; &lt;a href="http://www.youtube.com/watch?v=xFTT01Symx4"&gt;Mario A Capella&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A group effort showing a bunch of people singing the Super Mario tune, providing all the parts and the entertainment &amp;#8211; with none of the expensive woodwind section&lt;/p&gt;
&lt;h2&gt;8 &amp;#8211; &lt;a href="http://www.youtube.com/watch?v=LkCNJRfSZBU"&gt;Leeeeeeeroy Jeeeeenkins&lt;/a&gt;!&lt;/h2&gt;
&lt;p&gt;Ask any World Of Warcraft player if they have heard of Leeroy Jenkins and 99% will say yes. So utterly famous he appeared in a recent update and you can now get an in-game achievement with his name.&lt;/p&gt;
&lt;h2&gt;7 &amp;#8211; &lt;a href="http://www.youtube.com/watch?v=EK2tWVj6lXw"&gt;Rick Rolling&lt;/a&gt;!&lt;/h2&gt;
&lt;p&gt;A meme of the most annoying type. Used normally to trick people into listening to it &amp;#8211; I&amp;#8217;m offering it to you this time with a warning: This video contains Rick Astley.&lt;/p&gt;
&lt;h2&gt;6 &amp;#8211; &lt;a href="http://www.youtube.com/watch?v=5P6UU6m3cqk"&gt;Boo. Hahahahahaha! Baby&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This quite simply makes you smile and is one of the rare videos on the internet that doesn&amp;#8217;t involve laughing at someone else&amp;#8217;s expense.&lt;/p&gt;
&lt;h2&gt;5 &amp;#8211; &lt;a href="http://www.youtube.com/watch?v=HPPj6viIBmU"&gt;Star Wars Kid&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The original is amazing! But then &lt;a href="http://www.youtube.com/results?search_query=star+wars+kid&amp;amp;aq=f"&gt;there are loads of follow ups&lt;/a&gt; (particularly good is the &lt;a href="http://www.youtube.com/watch?v=3GJOVPjhXMY"&gt;light saber adaption&lt;/a&gt;). He became so famous that the Internet bought him a Macbook and Lucas Arts gave him a role in one of the Star Wars films. Epic!&lt;/p&gt;
&lt;h2&gt;4 &amp;#8211; &lt;a href="http://www.youtube.com/watch?v=tgbNymZ7vqY"&gt;The Muppets: Bohemian Rhapsody&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If I&amp;#8217;m not mistaken, the first full 1080P YouTube video (be sure to set it to HD before you watch!) &amp;#8211; and it&amp;#8217;s awesome. I&amp;#8217;m a fan of the Muppet&amp;#8217;s and Queen separately, so when this came out &amp;#8211; my head exploded.&lt;/p&gt;
&lt;h2&gt;3 &amp;#8211; &lt;a href="http://www.youtube.com/watch?v=4WgT9gy4zQA"&gt;The Ultimate Showdown (of Ultimate Destiny)&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;From the era of Flash comes this bizarre storyline accompaniment to what appears to be a celebrity-apocalypse. Very fun and very tongue in cheek.&lt;/p&gt;
&lt;h2&gt;2 &amp;#8211; &lt;a href="http://www.youtube.com/watch?v=RzToNo7A-94"&gt;Terry Tate: Office Quarterback&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Sensationally funny! I have long since campaigned to get a guy like this into every workplace. Up to yet, I&amp;#8217;ve been 100% unsuccessful &amp;#8211; but I have not given up hope!&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;1 &amp;#8211; &lt;a href="http://www.youtube.com/watch?v=dMH0bHeiRNg"&gt;The Evolution of Dance&lt;/a&gt;&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;This guy can SERIOUSLY dance. I don&amp;#8217;t mean in a crappy Britain&amp;#8217;s Got Talent kinda way! The best few minutes of your day &amp;#8211; watch it! It&amp;#8217;s the best video in the entire interwebs!&lt;/p&gt;
&lt;p&gt;No related posts.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VA_fHSfqt76AnhNOvxx8gUJ4YAo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VA_fHSfqt76AnhNOvxx8gUJ4YAo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VA_fHSfqt76AnhNOvxx8gUJ4YAo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VA_fHSfqt76AnhNOvxx8gUJ4YAo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Amadiere/~4/NKFVMz0TN_g" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://amadiere.com/blog/2011/03/the-10-best-youtube-videos-even-better-than-that-other-list-you-read/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://amadiere.com/blog/2011/03/the-10-best-youtube-videos-even-better-than-that-other-list-you-read/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://amadiere.com/blog/2011/03/the-10-best-youtube-videos-even-better-than-that-other-list-you-read/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alex Holt</name>
						<uri>http://amadiere.com</uri>
					</author>
		<title type="html"><![CDATA[C#.NET &amp; Classic ASP Password Hashing]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Amadiere/~3/b5cukmhKwag/" />
		<id>http://amadiere.com/blog/?p=327</id>
		<updated>2011-02-10T22:34:46Z</updated>
		<published>2011-02-10T21:02:25Z</published>
		<category scheme="http://amadiere.com/blog" term="ASP.NET" /><category scheme="http://amadiere.com/blog" term="C#" /><category scheme="http://amadiere.com/blog" term="Classic ASP" /><category scheme="http://amadiere.com/blog" term="Cryptography" /><category scheme="http://amadiere.com/blog" term="Security" /><category scheme="http://amadiere.com/blog" term="VBScript" />		<summary type="html"><![CDATA[One of the things I've recently been working on is a solution to allow both a .NET application and a legacy VBScript / Classic ASP to be able to validate a specific username / password combination, comparing two hashed passwords. In the process, I discovered (with the help of Google and StackOverflow) that accessing .NET objects from Classic ASP isn't really all that hard!
No related posts.]]></summary>
		<content type="html" xml:base="http://amadiere.com/blog/2011/02/c-net-classic-asp-password-hashing/">&lt;p&gt;One of the things I&amp;#8217;ve recently been working on is a solution to allow both a .NET application and a legacy VBScript / Classic ASP to be able to validate a specific username / password combination, comparing two hashed passwords. In the process, I discovered (with the help of Google and StackOverflow) that accessing .NET objects from Classic ASP isn&amp;#8217;t really all that hard! But to the issue at hand: Password Hashing! Sorting this out from the .NET side was relatively easy. For the purpose of this post, here is roughly what I have at the moment.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="csharp" style="font-family:monospace;"&gt;&lt;span style="color: #0600FF; font-weight: bold;"&gt;using&lt;/span&gt; &lt;span style="color: #008080;"&gt;System&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&lt;span style="color: #0600FF; font-weight: bold;"&gt;using&lt;/span&gt; &lt;span style="color: #008080;"&gt;System.Collections.Generic&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&lt;span style="color: #0600FF; font-weight: bold;"&gt;using&lt;/span&gt; &lt;span style="color: #008080;"&gt;System.Linq&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&lt;span style="color: #0600FF; font-weight: bold;"&gt;using&lt;/span&gt; &lt;span style="color: #008080;"&gt;System.Text&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&lt;span style="color: #0600FF; font-weight: bold;"&gt;using&lt;/span&gt; &lt;span style="color: #008080;"&gt;System.Security.Cryptography&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #0600FF; font-weight: bold;"&gt;namespace&lt;/span&gt; Amadiere&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Com&lt;/span&gt;&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Utilities&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
    &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #0600FF; font-weight: bold;"&gt;static&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold;"&gt;class&lt;/span&gt; Cryptography
    &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// Encrypts a password based on the passed in Encryption method (SHA512Managed is a good starting&lt;/span&gt;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// point if you don't know which to use).&lt;/span&gt;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// &amp;lt;remarks&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// The passwordSalt parameter is required to ensure that rainbow tables cannot be used to&lt;/span&gt;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// lookup all usernames if the salt is discovered. This salt is OK to store in the database,&lt;/span&gt;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// along with the hashedPassword generated by this function.&lt;/span&gt;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// &amp;lt;/remarks&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// &amp;lt;param name=&amp;quot;password&amp;quot;&amp;gt;The password to be encrypted.&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// &amp;lt;param name=&amp;quot;passwordSalt&amp;quot;&amp;gt;The individual grain of salt for that password.&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// &amp;lt;param name=&amp;quot;method&amp;quot;&amp;gt;The method by which to encrypt.&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// &amp;lt;returns&amp;gt;An string representing the hashed password (88 characters long).&amp;lt;/returns&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #0600FF; font-weight: bold;"&gt;static&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold;"&gt;string&lt;/span&gt; Hash&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #6666cc; font-weight: bold;"&gt;string&lt;/span&gt; password, &lt;span style="color: #6666cc; font-weight: bold;"&gt;string&lt;/span&gt; passwordSalt, HashMethods method&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
        &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
            &lt;span style="color: #6666cc; font-weight: bold;"&gt;string&lt;/span&gt; siteWideSalt &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;"&gt;&amp;quot;THIS IS A SITE WIDE SALT, BUT COULD BE A GUID&amp;quot;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
            &lt;span style="color: #6666cc; font-weight: bold;"&gt;string&lt;/span&gt; encryptedPassword&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
            &lt;span style="color: #0600FF; font-weight: bold;"&gt;switch&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;method&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
            &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
                &lt;span style="color: #0600FF; font-weight: bold;"&gt;default&lt;/span&gt;&lt;span style="color: #008000;"&gt;:&lt;/span&gt;
                    encryptedPassword &lt;span style="color: #008000;"&gt;=&lt;/span&gt; HashSHA512Managed&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;siteWideSalt &lt;span style="color: #008000;"&gt;+&lt;/span&gt; password &lt;span style="color: #008000;"&gt;+&lt;/span&gt; passwordSalt&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
                    &lt;span style="color: #0600FF; font-weight: bold;"&gt;break&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
            &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
            &lt;span style="color: #0600FF; font-weight: bold;"&gt;return&lt;/span&gt; encryptedPassword&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
        &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// One-way encrypts the password into oblivion. If the same password and salt are provided, the&lt;/span&gt;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// same end string will be churned out the other end of this sausage machine.&lt;/span&gt;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// &amp;lt;see cref=&amp;quot;http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha512managed.aspx&amp;quot;/&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// &amp;lt;example&amp;gt;HashSHA512Managed(&amp;quot;bobsYourUncle_SALT-GOES-HERE&amp;quot;);&amp;lt;/example&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// &amp;lt;param name=&amp;quot;password&amp;quot;&amp;gt;Unencoded pre-salted password.&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008080; font-style: italic;"&gt;/// &amp;lt;returns&amp;gt;An 88 character string, representing the originally encoded password.&amp;lt;/returns&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0600FF; font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: #0600FF; font-weight: bold;"&gt;static&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold;"&gt;string&lt;/span&gt; HashSHA512Managed&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #6666cc; font-weight: bold;"&gt;string&lt;/span&gt; saltedPassword&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
        &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
            UnicodeEncoding uniEncode &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; UnicodeEncoding&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
            SHA512Managed sha &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; SHA512Managed&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
            &lt;span style="color: #6666cc; font-weight: bold;"&gt;byte&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#93;&lt;/span&gt; bytePassword &lt;span style="color: #008000;"&gt;=&lt;/span&gt; uniEncode&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;GetBytes&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;saltedPassword&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
            &lt;span style="color: #6666cc; font-weight: bold;"&gt;byte&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#93;&lt;/span&gt; hash &lt;span style="color: #008000;"&gt;=&lt;/span&gt; sha&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ComputeHash&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;bytePassword&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
            &lt;span style="color: #0600FF; font-weight: bold;"&gt;return&lt;/span&gt; Convert&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ToBase64String&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;hash&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
        &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
    &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold;"&gt;enum&lt;/span&gt; HashMethods
    &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
        SHA512
    &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The Classic ASP side of things wasn&amp;#8217;t as easy. There are no built in libraries for SHA512 (or in fact, many other password hashing algorithms). So I had a few options on how I was to proceed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Abandon my choice of SHA512 and go with MD5 where there seemed to be a bit more usage in the community. I was reluctant to do this because it isn&amp;#8217;t as good as SHA512.&lt;/li&gt;
&lt;li&gt;Copy some code sample that has been created by someone else, that I either have to accept is OK, or spend a good deal of time understanding it and breaking it down bit by bit.&lt;/li&gt;
&lt;li&gt;Create a custom COM object in .NET, register it in the GAC and reference that via Classic ASP.&lt;/li&gt;
&lt;li&gt;Access the .NET functions directly from Classic ASP.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The last option won &amp;#8211; because it worked, and because it meant a lot less maintenance and praying for things to keep working. This is the code that pretty much does the same as the above .NET code, but in VBScript.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="vb" style="font-family:monospace;"&gt;&lt;span style="color: #E56717; font-weight: bold;"&gt;Function&lt;/span&gt; Hash(strPassword, strIndividualSalt)
&amp;nbsp;
  Const strSiteWideSalt = &lt;span style="color: #800000;"&gt;&amp;quot;THIS IS A SITE WIDE SALT, BUT COULD BE A GUID&amp;quot;&lt;/span&gt;
  Hash = HashSHA512Managed(strSiteWideSalt &amp;amp; strPassword &amp;amp; strIndividualSalt)
&amp;nbsp;
&lt;span style="color: #8D38C9; font-weight: bold;"&gt;End&lt;/span&gt; &lt;span style="color: #E56717; font-weight: bold;"&gt;Function&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #E56717; font-weight: bold;"&gt;Function&lt;/span&gt; HashSHA512Managed(saltedPassword)
&amp;nbsp;
  &lt;span style="color: #151B8D; font-weight: bold;"&gt;Dim&lt;/span&gt; objMD5, objUTF8
  &lt;span style="color: #151B8D; font-weight: bold;"&gt;Dim&lt;/span&gt; arrByte
  &lt;span style="color: #151B8D; font-weight: bold;"&gt;Dim&lt;/span&gt; strHash
  &lt;span style="color: #151B8D; font-weight: bold;"&gt;Set&lt;/span&gt; objUnicode = &lt;span style="color: #E56717; font-weight: bold;"&gt;CreateObject&lt;/span&gt;(&lt;span style="color: #800000;"&gt;&amp;quot;System.Text.UnicodeEncoding&amp;quot;&lt;/span&gt;)
  &lt;span style="color: #151B8D; font-weight: bold;"&gt;Set&lt;/span&gt; objSHA512 = Server.&lt;span style="color: #E56717; font-weight: bold;"&gt;CreateObject&lt;/span&gt;(&lt;span style="color: #800000;"&gt;&amp;quot;System.Security.Cryptography.SHA512Managed&amp;quot;&lt;/span&gt;)
&amp;nbsp;
  arrByte = objUnicode.GetBytes_4(saltedPassword)
  strHash = objSHA512.ComputeHash_2((arrByte))
&amp;nbsp;
  HashSHA512Managed = ToBase64String(strHash)
&amp;nbsp;
&lt;span style="color: #8D38C9; font-weight: bold;"&gt;End&lt;/span&gt; &lt;span style="color: #E56717; font-weight: bold;"&gt;Function&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #E56717; font-weight: bold;"&gt;Function&lt;/span&gt; ToBase64String(rabyt)
&amp;nbsp;
  &lt;span style="color: #008000;"&gt;'Ref: http://stackoverflow.com/questions/1118947/converting-binary-file-to-base64-string
&lt;/span&gt;  &lt;span style="color: #151B8D; font-weight: bold;"&gt;Dim&lt;/span&gt; xml: &lt;span style="color: #151B8D; font-weight: bold;"&gt;Set&lt;/span&gt; xml = &lt;span style="color: #E56717; font-weight: bold;"&gt;CreateObject&lt;/span&gt;(&lt;span style="color: #800000;"&gt;&amp;quot;MSXML2.DOMDocument.3.0&amp;quot;&lt;/span&gt;)
  xml.LoadXml &lt;span style="color: #800000;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
  xml.documentElement.dataType = &lt;span style="color: #800000;"&gt;&amp;quot;bin.base64&amp;quot;&lt;/span&gt;
  xml.documentElement.nodeTypedValue = rabyt
  ToBase64String = Replace(xml.documentElement.Text,VbLf, &lt;span style="color: #800000;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;)
&amp;nbsp;
&lt;span style="color: #8D38C9; font-weight: bold;"&gt;End&lt;/span&gt; &lt;span style="color: #E56717; font-weight: bold;"&gt;Function&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;As you can see in the VBScript example, I can create the .NET objects as I would any other type of object in VBScript, the difference comes in how I use them. Normally, in C#, you&amp;#8217;d simply use ComputeHash() and there would be a number of overloads for you to choose from. As VBScript doesn&amp;#8217;t have the concept of overloading, you have to use a crazy-mad way of accessing the specific overload you want &amp;#8211; using an underscore. I&amp;#8217;ve not really come up with a full-proof way of working out which is which (though, if I&amp;#8217;m honest, I didn&amp;#8217;t try much). I did however find out that they started ComputeHash(), ComputeHash_1() and ComputeHash_2() &amp;#8211; I assume the numbers resemble the order they appear in Visual Studio when using intellisense for C# &amp;#8211; but trial and error is normally good enough.&lt;/p&gt;
&lt;p&gt;Hope this is of use to someone else! If anything, I&amp;#8217;m sure I&amp;#8217;ll find a need to do this again someday and I&amp;#8217;m sure it&amp;#8217;ll be useful for then! All this hashing has made me hungry!&lt;/p&gt;
&lt;div class="wp-caption alignright" style="width: 410px"&gt;&lt;a href="http://desarapen.blogspot.com/2008/07/frugal-fridays-corned-beef-hash.html"&gt;&lt;img class="alignright" style="float: right; align: right; margin: 10px;" title="Corned Beef Hash" src="http://amadiere.com/images/blog/CornedBeefHash.jpg" alt="Hashing passwords is hard! Let's eat!" width="400" height="266" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Hashing passwords is hard! Let&amp;#39;s eat!&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;No related posts.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5DDSJqjJnXSPPumVQZ6kbBpbEEY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5DDSJqjJnXSPPumVQZ6kbBpbEEY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5DDSJqjJnXSPPumVQZ6kbBpbEEY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5DDSJqjJnXSPPumVQZ6kbBpbEEY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Amadiere/~4/b5cukmhKwag" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://amadiere.com/blog/2011/02/c-net-classic-asp-password-hashing/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://amadiere.com/blog/2011/02/c-net-classic-asp-password-hashing/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://amadiere.com/blog/2011/02/c-net-classic-asp-password-hashing/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alex Holt</name>
						<uri>http://amadiere.com</uri>
					</author>
		<title type="html"><![CDATA[OpenID is NOT an ex-parrot!]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Amadiere/~3/KpDYmQRndhw/" />
		<id>http://amadiere.com/blog/?p=319</id>
		<updated>2010-11-20T14:13:14Z</updated>
		<published>2010-11-20T14:01:59Z</published>
		<category scheme="http://amadiere.com/blog" term="Human Factors" /><category scheme="http://amadiere.com/blog" term="Usability" /><category scheme="http://amadiere.com/blog" term="Websites" /><category scheme="http://amadiere.com/blog" term="Authentication" /><category scheme="http://amadiere.com/blog" term="OpenID" />		<summary type="html"><![CDATA[I&#8217;ve read a few Tweets recently that OpenID might be dead. Poppycock! OpenID is alive and kicking and as strong, if not stronger, than ever before. What is OpenID? OpenID is a means of identifying that someone who&#8217;s visiting your site is the same person as someone who&#8217;s already been here. The was traditionally with [...]
No related posts.]]></summary>
		<content type="html" xml:base="http://amadiere.com/blog/2010/11/openid-is-not-an-ex-parrot/">&lt;p&gt;I&amp;#8217;ve read a few Tweets recently that OpenID might be dead. Poppycock! OpenID is alive and kicking and as strong, if not stronger, than ever before.&lt;/p&gt;
&lt;p&gt;&lt;img class="alignright" style="margin: 10px; float: right;" title="An ex-parrot." src="/images/blog/deadparrot.jpg" alt="An ex-parrot" width="299" height="213" /&gt;&lt;/p&gt;
&lt;p&gt;What is OpenID? OpenID is a means of identifying that someone who&amp;#8217;s visiting your site is the same person as someone who&amp;#8217;s already been here. The was traditionally with Usernames and Passwords. If you successfully signed in, we assumed you were the same person. OpenID provides that level of authentication. It basically sends back a little message from the provider (e.g. Google) saying &amp;#8220;Yo dude, not spoken in a while, but this customer you asked me about? Well it&amp;#8217;s &amp;lt;INSERTGUIDHERE&amp;gt;. Just go ahead and log them straight in or create them a new account&amp;#8221;. I now don&amp;#8217;t need to store passwords as a website &amp;#8211; this is great news!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://twitter.com/robconory"&gt;Rob Conory&lt;/a&gt; (of &lt;a href="http://www.tekpub.com"&gt;Tekpub&lt;/a&gt;) recently wrote a very excellent article &amp;#8220;&lt;a title="Rob Conory's Open ID article" href="http://blog.wekeroad.com/thoughts/open-id-is-a-party-that-happened"&gt;Open ID Is A Nightmare&lt;/a&gt;&amp;#8221; in which he proceeds to outline his case for why OpenID is turning into a nightmare for him. It&amp;#8217;s an entertainingly written article in Rob&amp;#8217;s quirky style that outlines his viewpoints as both a developer &lt;strong&gt;and as a business owner&lt;/strong&gt;. The latter point, as he goes on to say, is the key criteria in why he&amp;#8217;s reached the point he&amp;#8217;s at at the moment.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;A friend of mine was offering a ton of solutions to my Open ID woes over Skype the other day &amp;#8211; insisting that it&amp;#8217;s worth &amp;#8220;investing in for the long run &amp;#8211; the kinks will get worked out&amp;#8221;. I sort of agree as a dev &amp;#8211; as a business owner I couldn&amp;#8217;t give a rat&amp;#8217;s ass.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;He is smart guy and has a number of very relevant points that anyone considering using OpenID should be thinking about. He had a number of OpenID unrelated issues (&lt;a href="https://rpxnow.com/"&gt;RPXNow&lt;/a&gt; downtime), but they all contributed to the main gripe he had about things: &lt;strong&gt;customers were unable to get into his site, a site they&amp;#8217;ve paid to get access to&lt;/strong&gt;. This is a key point. People are PAYING to watch the content over at Tekpub and through no fault of his own, they were unable to get in. The problem is easily wafted away, waving your hands in the air and saying &amp;#8220;this is a user problem!&amp;#8221;. The user created an account and then forgot which provider they logged in with in the first place! What fools! Let us all gather around a camp fire, eat sausages and laugh at their pathetic attempts at life. Except &amp;#8211; lets not forget Tekpub&amp;#8217;s audience. It&amp;#8217;s techies. It&amp;#8217;s developers. It&amp;#8217;s people like us. If WE are capable of getting confused and lost as to what is going on &amp;#8211; then the anecdotal &amp;#8221;mum&amp;#8221; is going to struggle a hell of a lot more.&lt;/p&gt;
&lt;p&gt;The bonus and one of the driving forces behind OpenID is the supposed &amp;#8220;reduced friction&amp;#8221; when creating an account with a site. As Rob points out, there is the issue because we can effectively get so little back from the OpenID Provider, that we&amp;#8217;d be unable to dig out the account from the mass of other accounts with no additional data. The users account is effectively orphaned until they remember the provider they signed up with. Locked out and angry.&lt;/p&gt;
&lt;p&gt;This debate took a whole other level of LOL when &lt;a href="http://twitter.com/shanselman"&gt;Scott Hanselman&lt;/a&gt; tweeted:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Is OpenID dead? Poor usability to blame?&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;For some bizarre reason, the Twittersphere decided that that was neither a question, but an official announcement from Microsoft that OpenID was about to fail. When in reality, it was in relation to Rob&amp;#8217;s above post. Humourous to those unaffected, but I can imagine quite irritating and stressful to Scott.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is wrong with OpenID?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;OpenID is fantastic at doing what it&amp;#8217;s does, but there is definitely room for improvement. Maybe not in OpenID itself, but in the way it is implemented. Some of the key things that I personally think developers need to consider when designing a login system that uses OpenID are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Each Account should be able to have more than one Login method attached to it&lt;/strong&gt;.&lt;br /&gt;
This is something I think people have inherited from years gone by. Traditionally, an account has a Username and a password, and nowadays maybe an OpenID field too. In reality, the user should have the ability to add whatever authentication methods your site allows, to their account. A one-to-many relationship from Accounts to Logins. E.g. I might sign up with my Google account, then decide later that I want to create a Username and Password for whatever reason. Then a bit later, I spot you have Facebook Connect as an option &amp;#8211; cool, I&amp;#8217;ll attach my Facebook account to this site too. Now where am I? I have 3 ways of getting into my account. That&amp;#8217;s great news &amp;#8211; that&amp;#8217;s a lot easier for me as as long as I guess one of them randomly when I&amp;#8217;m prompted &amp;#8211; I&amp;#8217;m sorted.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Upgraded accounts require more information.&lt;/strong&gt;&lt;br /&gt;
The low barrier to entry should be set for standard users, but the minute you decide you want to upgrade them (make them a moderator or take payment for a service from them), you should require more information to make sure you can trace things when issues arise. Requiring this would have given Rob the facility to offer a &amp;#8220;forgotten your password?&amp;#8221; function on his login page that would solve the issue that paying customers couldn&amp;#8217;t get in.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The ability to merge accounts.&lt;br /&gt;
&lt;/strong&gt;Unfortunately, people have lots of different accounts around the internet. They will probably, as Rob did when trying to access StackOverflow, get into your site using the wrong one and in the process, create a brand new account. In theory, what they wanted to do was log in as the correct one and then maybe add this new provider to their list of available logins. This is a tricky problem to solve, but it&amp;#8217;s doable. You want to offer the option for a user to merge their two accounts, copying whatever appropriate data to their primary account. If you can achieve this, then you&amp;#8217;re giving the users the ability to solve their own problems &amp;#8211; great! And even if they don&amp;#8217;t, you have a nice UI for doing it on their behalf.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;#8220;WTF does OpenID mean?&amp;#8221;&lt;br /&gt;
&lt;/strong&gt;Seriously. I&amp;#8217;m have no ready solution for this problem &amp;#8211; but people don&amp;#8217;t know what OpenID is and that&amp;#8217;s because it&amp;#8217;s techie. We probably need to drop the OpenID words from headings to merely part of the description for clarification, when displaying our Authentication Options. People should just be offered the choice of which site they want to authenticate via: Google, Yahoo!, Facebook or whatever. The issue still remains that people don&amp;#8217;t exactly understand still what it means that they are being &amp;#8220;authenticated by Facebook&amp;#8221;. Half of them won&amp;#8217;t care that they don&amp;#8217;t know, but for the other half, you probably want to re-assure them of what it is that they are allowing you to do. I don&amp;#8217;t want some random site I&amp;#8217;ve just stumbled upon telling everyone on Facebook that I&amp;#8217;ve done XYZ on website ABC. I think the OpenID selector is good &amp;#8211; but is it perfect? Not really &amp;#8211; it works for me and is very simple to use &amp;#8211; but it doesn&amp;#8217;t answer any questions you might have as a customer. As a developer, you need to do that. You need to ease their fears.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If I was creating a site now, would I use OpenID? &lt;strong&gt;ABSO-FRICKIN&amp;#8217;-LUTELY! &lt;/strong&gt;It&amp;#8217;s great and makes it so easy to actually log into to a site. If I can transfer that ease-of-access to the customer, while not freaking them out &amp;#8211; then I&amp;#8217;m onto a winner! Is OpenID an ex-parrot? Not at all &amp;#8211; it&amp;#8217;s here for the foreseeable future in my opinion. And that is a great thing!&lt;/p&gt;
&lt;p&gt;No related posts.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yTu24E6zbIv2GtTVZq4o4Q9SU1I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yTu24E6zbIv2GtTVZq4o4Q9SU1I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yTu24E6zbIv2GtTVZq4o4Q9SU1I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yTu24E6zbIv2GtTVZq4o4Q9SU1I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Amadiere/~4/KpDYmQRndhw" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://amadiere.com/blog/2010/11/openid-is-not-an-ex-parrot/#comments" thr:count="2" />
		<link rel="replies" type="application/atom+xml" href="http://amadiere.com/blog/2010/11/openid-is-not-an-ex-parrot/feed/atom/" thr:count="2" />
		<thr:total>2</thr:total>
	<feedburner:origLink>http://amadiere.com/blog/2010/11/openid-is-not-an-ex-parrot/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alex Holt</name>
						<uri>http://amadiere.com</uri>
					</author>
		<title type="html"><![CDATA[HTC HD7 (Windows Phone 7) vs Apple iPhone 4 (iOS 4)]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Amadiere/~3/-kfA49-5hN0/" />
		<id>http://amadiere.com/blog/?p=312</id>
		<updated>2010-11-04T22:08:57Z</updated>
		<published>2010-11-04T22:08:57Z</published>
		<category scheme="http://amadiere.com/blog" term="Reviews" /><category scheme="http://amadiere.com/blog" term="Windows Phone 7" /><category scheme="http://amadiere.com/blog" term="HTC HD7" /><category scheme="http://amadiere.com/blog" term="iPhone" />		<summary type="html"><![CDATA[...when Microsoft announced that they would be launching themselves into the mobile phone operating systems market (and Windows Mobile 6.5 doesn't count as "being in the market - I'm sorry) and that I'd be able to write apps written in Silverlight and C# - I was sold. I had to get one of the devices. I whittled down the time to launch by drinking coffee and occasionally leaving the house. Eventually, I managed to get hold of a device and begin to use it. I thought I'd write my observations down for anyone interested to know how they both compare.
Related posts:<ol>
<li><a href='http://amadiere.com/blog/2010/08/windows-phone-7-getting-started-link-dump/' rel='bookmark' title='Windows Phone 7: Getting Started Link-dump'>Windows Phone 7: Getting Started Link-dump</a> <small>One of the things Microsoft will be hoping on is...</small></li>
<li><a href='http://amadiere.com/blog/2010/09/isolated-storage-on-windows-phone-7/' rel='bookmark' title='Isolated Storage on Windows Phone 7'>Isolated Storage on Windows Phone 7</a> <small>As Windows Phone 7 doesn't have an SQL Server edition...</small></li>
</ol>]]></summary>
		<content type="html" xml:base="http://amadiere.com/blog/2010/11/htc-hd7-windows-phone-7-vs-apple-iphone-4-ios-4/">&lt;p&gt;&lt;img class="alignright" style="float: right;" title="HTC HD7" src="http://amadiere.com/images/blog/HTCHD7.jpg" alt="4.3inches of beauty" width="384" height="289" /&gt;I&amp;#8217;ve been a fan of the iPhone since the 3G came out and it&amp;#8217;s been the first phone that I&amp;#8217;ve actually enjoyed using throughout its entire lifespan. Upgrading to the iPhone 4 was something of a massive upgrade at the time as well &amp;#8211; the speed difference alone is outstanding when compared to the 2 year old 3G! However, the one thing that&amp;#8217;s always bugged me was the fact I needed an MacBook to develop on it. I can&amp;#8217;t afford one basically, so that means I can&amp;#8217;t develop on their platform. Fair enough, it&amp;#8217;s their call and I&amp;#8217;m not overly worried about it for now. However, when Microsoft announced that they would be launching themselves into the mobile phone operating systems market (and Windows Mobile 6.5 doesn&amp;#8217;t count as &amp;#8220;being in the market &amp;#8211; I&amp;#8217;m sorry) and that I&amp;#8217;d be able to write apps written in Silverlight and C# &amp;#8211; I was sold. I had to get one of the devices. I whittled down the time to launch by drinking coffee and occasionally leaving the house. Eventually, I managed to get hold of a device and begin to use it. I thought I&amp;#8217;d write my observations down for anyone interested to know how they both compare.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why did I get the HTC HD7:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There were a number of reasons. Primarily because the 4.3inch screen is great (it still fits in my pocket just fine) and more importantly, it had 16Gb of space. With none of the WP7 devices offering SD Card readers at launch (in the same way iPhone&amp;#8217;s do not), space was at a premium. Having been limited by the iPhone 3G 8Gb before, I wasn&amp;#8217;t going to make the same mistake again quite so lightly. All the reviews I&amp;#8217;d read had given the device good reviews and it seemed like one of the best devices that I could have got at launch time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How did they compare?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Screen Quality: &lt;/strong&gt;You know, I really can&amp;#8217;t find any differences between the two devices. Maybe it&amp;#8217;s my untrained eyes, but the WP7 is definitely in the league with the iPhone 4 and it&amp;#8217;s retina display. Touch wise, they both behave remarkably well and are extremely responsive. I haven&amp;#8217;t found myself pressing harder because my gestures weren&amp;#8217;t detected correctly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sound Quality: &lt;/strong&gt;I was surprised about this one and I never actually thought about it too much in the run up to buying it, but the quality of the audio produced by the HD7 far outstrips that of the iPhone 4. I listed to a bunch of my songs, including Bat Out Of Hell (which I&amp;#8217;ve listed to on countless different formats) and the richness of the sound is amazing. Coupled with the good use of surround sound, the HD7 made for a great listening experience. I didn&amp;#8217;t particularly like the earphones that came with it though, but then, the same can be said about the iPhone ones&amp;#8230; so Meh.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Maps: &lt;/strong&gt;I think unfortunately, this might something odd with my location, but the HD7 picks up my location as 12 miles from where I&amp;#8217;m actually sat. A touch inconvenient for a &amp;#8220;where&amp;#8217;s my nearest&amp;#8221; feature. The Windows Phone 7 devices all use Bing maps and the iPhone uses Google maps. For the most part, they behave exactly as you&amp;#8217;d expect them too and they are good for what they do. The iPhone really begins to excel again with it&amp;#8217;s built-in street view.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;App Store: &lt;/strong&gt;Unsurprising I guess that iPhone would win this battle &amp;#8211; it&amp;#8217;s had almost 2 years of a headstart on the Windows Phone 7 market and in that time has amassed a horde of really amazing apps. As for the Marketplace itself, I think neither really excels at helping users find the applications that they might like. Genius in the Apple AppStore has never really given me much luck, and while the Microsoft version is currently an easily navigated setup, I fear that once content begins to flood in, some of the ease-of-use will quickly wash away.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;App Development&lt;/strong&gt;&lt;strong&gt;: &lt;/strong&gt;As an ASP.NET and C# developer I&amp;#8217;m going to be bias on this one. But I do consider the platform to be a much more simplistic way to develop. The pain of Objective-C is that the developers must delve quite low to the OS, performing their own garbage collection and other similar tasks. Silverlight, which is used by Windows Phone 7, is a very different experience indeed and you can spend the time concentrating on your App. Visual Studio 2010 &amp;#8211; it really is awesome and to be able to have a truly awesome free development environment cannot be under estimated. And while Microsoft is untested in this water, it&amp;#8217;s Application Acceptance Guidelines appear to be a lot more black and white than Apple&amp;#8217;s which are a notorious issue.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Camera: &lt;/strong&gt;To be honest, I&amp;#8217;ve not really exausted the tests on the camera yet, but from what I can tell &amp;#8211; the iPhone wins this battle. It&amp;#8217;s HDR function is actually pretty nifty and as a result, the pictures seem to be some of the best I&amp;#8217;ve seen from camera phones. The HD7 isn&amp;#8217;t quite as good. Sure the pictures are ok, but inside, I&amp;#8217;ve found things are a little grainier than the iPhone which has been frustrating.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web Browsing: &lt;/strong&gt;The experience is quite similar between the two browsers. Certainly both are able to pinch and zoom and scroll and throw themselves around the pages without too much hassle. But I have found that currently, a lot of websites (including Google Reader for example) treat the HD7 as a primitive mobile browser and show it a very reduced and scaled down browser experience. This isn&amp;#8217;t an issue with the phone and given time, I&amp;#8217;m sure that Google will update their detection mechanisms and there will be fully fledged Smart Phone RSS reading. Other than that, I would say that I&amp;#8217;m a little disappointed with the limitation of the favourites (there appears to be no way of organising the list) and more specifically at O2 for making Yahoo! the default search engine when typing into the browser address bar (an horrific pain in the posterior given that Yahoo! don&amp;#8217;t detect that it&amp;#8217;s a decent phone either!).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Other things I&amp;#8217;ve noticed about the HTC7:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Calendar is great. In additon to putting things in your diary with alerts to remind you when they are about to happen &amp;#8211; your events in general appear on your home screen, showing you today and tomorrow&amp;#8217;s events. Giving me a fighting chance of remembering the cat&amp;#8217;s vet appointment more than 15 minutes beforehand!&lt;/li&gt;
&lt;li&gt;The ringtone&amp;#8217;s couldn&amp;#8217;t be changed, or at least, not that I could spot.&lt;/li&gt;
&lt;li&gt;No iTunes means no stupid updates pestering me to install Safari or Mobile Me or other Apple products which I have absolutely no desire to use. iTunes is like the modern day equivalent of Real Player from a few years ago. Zune is a nice enough experience. I found being about to sync my phone with the music I wanted was a lot easier and less hassle than iTunes. The same with my Podcasts and Videos &amp;#8211; a great step forward from the alternatives.&lt;/li&gt;
&lt;li&gt;Facebook integrated with my contacts is fantastic &amp;#8211; it makes the whole experience seemless. While I don&amp;#8217;t frequent Facebook overly often, I have a good number of friends and with all this merged into my phone book, I can on a whim simply write on their wall as easily as sending them a text. You can of course, take the alternative route and only import Facebook contact information for the people you already have Contacts for &amp;#8211; which might tickle the fancy of more people.&lt;/li&gt;
&lt;li&gt;The context search is useful. One of the three touch buttons at the foot of the phone (&amp;#8220;Back&amp;#8221; and &amp;#8220;Home&amp;#8221; being the other two) is for search and depending on what you are doing at the time, it searches different things. E.g. when in your People Hub (phone book) is searches for a contact, or when in the browser, it searches the web. Useful.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;The bottom line is that currently, I&amp;#8217;m missing all the Apps that I had on my iPhone. Plain and simple. For that reason alone, the Windows Phone 7 is second favourite at the moment. But as this is something that I imagine will change in time, I do think that the phone will get better and better. And I for one, am really looking forward to seeing if Microsoft can whip Android into a real challenge to the iPhone and more importantly, challenge the iPhone itself! More competition in a marketplace is often a great thing &amp;#8211; and I that&amp;#8217;ll be true here.&lt;/p&gt;
&lt;p&gt;Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://amadiere.com/blog/2010/08/windows-phone-7-getting-started-link-dump/' rel='bookmark' title='Windows Phone 7: Getting Started Link-dump'&gt;Windows Phone 7: Getting Started Link-dump&lt;/a&gt; &lt;small&gt;One of the things Microsoft will be hoping on is...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://amadiere.com/blog/2010/09/isolated-storage-on-windows-phone-7/' rel='bookmark' title='Isolated Storage on Windows Phone 7'&gt;Isolated Storage on Windows Phone 7&lt;/a&gt; &lt;small&gt;As Windows Phone 7 doesn't have an SQL Server edition...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QHLuGWj7DDkeVGIh0HRaEhv9V6c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QHLuGWj7DDkeVGIh0HRaEhv9V6c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QHLuGWj7DDkeVGIh0HRaEhv9V6c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QHLuGWj7DDkeVGIh0HRaEhv9V6c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Amadiere/~4/-kfA49-5hN0" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://amadiere.com/blog/2010/11/htc-hd7-windows-phone-7-vs-apple-iphone-4-ios-4/#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://amadiere.com/blog/2010/11/htc-hd7-windows-phone-7-vs-apple-iphone-4-ios-4/feed/atom/" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://amadiere.com/blog/2010/11/htc-hd7-windows-phone-7-vs-apple-iphone-4-ios-4/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alex Holt</name>
						<uri>http://amadiere.com</uri>
					</author>
		<title type="html"><![CDATA[The Anti-Phonetic Alphabet]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Amadiere/~3/uPkZWPHSg8I/" />
		<id>http://amadiere.com/blog/?p=286</id>
		<updated>2010-10-15T20:50:35Z</updated>
		<published>2010-10-15T20:45:44Z</published>
		<category scheme="http://amadiere.com/blog" term="Random Topics" />		<summary type="html"><![CDATA[Long has the phonetic alphabet enjoyed dominance over the 'can you spell that for me' market! Well, no more! The following is my suggestion to make telephone operators lives complete hell...!
No related posts.]]></summary>
		<content type="html" xml:base="http://amadiere.com/blog/2010/10/non-phonetic-alphabet/">&lt;p&gt;This is my first post since a change of job for me, but it&amp;#8217;s one that&amp;#8217;s been brewing for a while.&lt;/p&gt;
&lt;p&gt;Long has the phonetic alphabet enjoyed dominance over the &amp;#8216;can you spell that for me&amp;#8217; market! Well, no more! The following is my suggestion to make telephone operators lives complete hell&amp;#8230;! If you&amp;#8217;re not paying for the bill and you don&amp;#8217;t fancy being nice to the operator on the phone for whatever reason, then consider making the conversation very complicated and interesting with the new Anti-Phonetic alphabet.&lt;/p&gt;
&lt;p&gt;Before we dive right in, I&amp;#8217;d like to make two points:&lt;/p&gt;
&lt;p&gt;1) Phonetic is an silly word as it&amp;#8217;s not spelt the way it&amp;#8217;s spoken and could quite easily have been in this list. The person who came up with the spelling had as much of a sense of humour as the person who decided to put an S in &amp;#8220;Lisp&amp;#8221;.&lt;/p&gt;
&lt;p&gt;2) Not all letters in this list are idea. I&amp;#8217;ve marked with an asterisk (*) the ones I feel could be improved and I&amp;#8217;ve filled them with example words which are probably adequate for causing confusion.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A&lt;/strong&gt;ubergine&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B&lt;/strong&gt;dellium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C&lt;/strong&gt;ygnet&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D&lt;/strong&gt;jinn&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;E&lt;/strong&gt;we&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;F&lt;/strong&gt;ort *&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;G&lt;/strong&gt;nome&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;H&lt;/strong&gt;onour&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I&lt;/strong&gt;gor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;J&lt;/strong&gt;alapeno&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;K&lt;/strong&gt;not&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;L&lt;/strong&gt;landudno&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;M&lt;/strong&gt;nemonic&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;N&lt;/strong&gt;guyen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;O&lt;/strong&gt;uija&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;P&lt;/strong&gt;terodactyl&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Q&lt;/strong&gt;uay&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;R&lt;/strong&gt;ight *&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;S&lt;/strong&gt;ee&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;T&lt;/strong&gt;sunami&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;U&lt;/strong&gt;rn&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;V&lt;/strong&gt;entripotent *&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;W&lt;/strong&gt;hy&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;X&lt;/strong&gt;enophobia&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Y&lt;/strong&gt;ou&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Z&lt;/strong&gt;enzizenzizenzic&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Make sure you have a nosey at the words if you don&amp;#8217;t know what they mean, or even, how to pronounce them. Go forth and cause chaos! Muhahahaha!&lt;/p&gt;
&lt;p&gt;No related posts.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0bNwmUSq8yVSRgeqsmbX09v6L38/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0bNwmUSq8yVSRgeqsmbX09v6L38/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0bNwmUSq8yVSRgeqsmbX09v6L38/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0bNwmUSq8yVSRgeqsmbX09v6L38/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Amadiere/~4/uPkZWPHSg8I" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://amadiere.com/blog/2010/10/non-phonetic-alphabet/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://amadiere.com/blog/2010/10/non-phonetic-alphabet/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://amadiere.com/blog/2010/10/non-phonetic-alphabet/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alex Holt</name>
						<uri>http://amadiere.com</uri>
					</author>
		<title type="html"><![CDATA[Isolated Storage on Windows Phone 7]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Amadiere/~3/BBF8S2RpgDg/" />
		<id>http://amadiere.com/blog/?p=302</id>
		<updated>2010-09-10T20:30:09Z</updated>
		<published>2010-09-10T20:30:09Z</published>
		<category scheme="http://amadiere.com/blog" term="C#" /><category scheme="http://amadiere.com/blog" term="Databases" /><category scheme="http://amadiere.com/blog" term="Windows Phone 7" /><category scheme="http://amadiere.com/blog" term="Mobiles" />		<summary type="html"><![CDATA[As Windows Phone 7 doesn't have an SQL Server edition available for use, and that some of the community libraries are quite big for most scenarios, I set about creating my own simplistic class that would allow me to persist data to the on-device Isolated Storage...
Related posts:<ol>
<li><a href='http://amadiere.com/blog/2010/08/windows-phone-7-getting-started-link-dump/' rel='bookmark' title='Windows Phone 7: Getting Started Link-dump'>Windows Phone 7: Getting Started Link-dump</a> <small>One of the things Microsoft will be hoping on is...</small></li>
<li><a href='http://amadiere.com/blog/2010/11/htc-hd7-windows-phone-7-vs-apple-iphone-4-ios-4/' rel='bookmark' title='HTC HD7 (Windows Phone 7) vs Apple iPhone 4 (iOS 4)'>HTC HD7 (Windows Phone 7) vs Apple iPhone 4 (iOS 4)</a> <small>...when Microsoft announced that they would be launching themselves into...</small></li>
</ol>]]></summary>
		<content type="html" xml:base="http://amadiere.com/blog/2010/09/isolated-storage-on-windows-phone-7/">&lt;p&gt;One of the most amazing omissions from the Windows Phone 7 OS is an SQL Server of some description that applications can use (I think there is a SQL Server Compact edition baked into the build, but it&amp;#8217;s only exposed to the native apps). This leaves anyone familiar with doing all their storage via relational databases in a bit of a lurch.&lt;/p&gt;
&lt;p&gt;Having a look around, there were a few work-arounds, namely third party libraries such as Perst &amp;amp; Sterling. These act as a layer of abstraction that allow you to use LINQ to access your objects and could be of benefit for some of the more complex applications. I found both of them to have their drawbacks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a title="Perst" href="http://www.mcobject.com/perst"&gt;Perst&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt;: &lt;/strong&gt;From McObject is one alternative, but if you plan on doing a commercial application, you should bare in mind their licensing, of which, their FAQ says:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;No, Perst is not free. McObject Perst is available under a dual license. Under the GPL, you may evaluate the source code free of charge and you may use Perst free of charge in an application for which the source code is also freely available. If you wish to use a Perst in an application but do not or cannot redistribute your application source code, you can use Perst under a commercial license.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://sterling.codeplex.com/documentation"&gt;Sterling&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt;: &lt;/strong&gt;This seemed promising, but I had a number of issues getting the code to work (it was late, in fairness) I decided to give up.&lt;/p&gt;
&lt;p&gt;In reality though, most applications that are going to be made don&amp;#8217;t need any complicated database structure behind them. Database implementations are most likely going to be overkill. This is where I decided to do what probably the majority of WP7 developers have decided to do, and &amp;#8220;Roll-Their-Own&amp;#8221; database solution. Mine is based on a general accepted practice, using XML Serialisation to store my POCOs. While it might have limitations and performance issues later down the line, for now &amp;#8211; it&amp;#8217;s performing very admirably and there seemed no point in premature optimisation just yet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;My Solution&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The main class I created (&lt;strong&gt;MyDataContext.cs&lt;/strong&gt;) contains the functions for both saving and loading the data, as well as the &amp;#8216;schema&amp;#8217; for the entire database.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="csharp" style="font-family:monospace;"&gt;&lt;span style="color: #0600FF; font-weight: bold;"&gt;using&lt;/span&gt; &lt;span style="color: #008080;"&gt;System&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&lt;span style="color: #0600FF; font-weight: bold;"&gt;using&lt;/span&gt; &lt;span style="color: #008080;"&gt;System.Collections.Generic&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&lt;span style="color: #0600FF; font-weight: bold;"&gt;using&lt;/span&gt; &lt;span style="color: #008080;"&gt;IsolatedExampleApp.Data.Models&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&lt;span style="color: #0600FF; font-weight: bold;"&gt;using&lt;/span&gt; &lt;span style="color: #008080;"&gt;System.IO.IsolatedStorage&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&lt;span style="color: #0600FF; font-weight: bold;"&gt;using&lt;/span&gt; &lt;span style="color: #008080;"&gt;System.IO&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&lt;span style="color: #0600FF; font-weight: bold;"&gt;using&lt;/span&gt; &lt;span style="color: #008080;"&gt;System.Xml.Serialization&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #0600FF; font-weight: bold;"&gt;namespace&lt;/span&gt; IsolatedExampleApp&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Data&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
  &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold;"&gt;class&lt;/span&gt; IsolatedDatabase
  &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
    &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; IsolatedDatabase&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
    &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
      &lt;span style="color: #008080; font-style: italic;"&gt;// For each model that is a list item, you need to add a initialising statement to the Constructor&lt;/span&gt;
      Albums &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; List&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
      Artists &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; List&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
    &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span style="color: #008080; font-style: italic;"&gt;// These properties effectively form the publicly viewable schema of the database.&lt;/span&gt;
    &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; List Albums &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt; get&lt;span style="color: #008000;"&gt;;&lt;/span&gt; set&lt;span style="color: #008000;"&gt;;&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
    &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; List Artists &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt; get&lt;span style="color: #008000;"&gt;;&lt;/span&gt; set&lt;span style="color: #008000;"&gt;;&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
    &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; Options Options &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt; get&lt;span style="color: #008000;"&gt;;&lt;/span&gt; set&lt;span style="color: #008000;"&gt;;&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold;"&gt;void&lt;/span&gt; Load&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
    &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
      &lt;span style="color: #0600FF; font-weight: bold;"&gt;using&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;IsolatedStorageFile store &lt;span style="color: #008000;"&gt;=&lt;/span&gt; IsolatedStorageFile&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;GetUserStoreForApplication&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
      &lt;span style="color: #0600FF; font-weight: bold;"&gt;using&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;IsolatedStorageFileStream stream &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; IsolatedStorageFileStream&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #666666;"&gt;&amp;quot;IsolatedExampleApp.txt&amp;quot;&lt;/span&gt;, FileMode&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;OpenOrCreate&lt;/span&gt;, FileAccess&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Read&lt;/span&gt;, store&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
      &lt;span style="color: #0600FF; font-weight: bold;"&gt;using&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;StreamReader reader &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; StreamReader&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;stream&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
      &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
        XmlSerializer serializer &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; XmlSerializer&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;typeof&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;IsolatedDatabase&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
        var unserialized &lt;span style="color: #008000;"&gt;=&lt;/span&gt; reader&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;EndOfStream&lt;/span&gt; &lt;span style="color: #008000;"&gt;?&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; IsolatedDatabase&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #008000;"&gt;:&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;IsolatedDatabase&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;serializer&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Deserialize&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;reader&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&amp;nbsp;
        &lt;span style="color: #008080; font-style: italic;"&gt;// Each schema is repopulated with information when the app is loaded.&lt;/span&gt;
        Albums &lt;span style="color: #008000;"&gt;=&lt;/span&gt; unserialized&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Albums&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
        Artists &lt;span style="color: #008000;"&gt;=&lt;/span&gt; unserialized&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Artists&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
        Options &lt;span style="color: #008000;"&gt;=&lt;/span&gt; unserialized&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Options&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
      &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
    &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span style="color: #0600FF; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold;"&gt;bool&lt;/span&gt; Save&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
    &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
      &lt;span style="color: #0600FF; font-weight: bold;"&gt;try&lt;/span&gt;
      &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
        &lt;span style="color: #0600FF; font-weight: bold;"&gt;using&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;IsolatedStorageFile store &lt;span style="color: #008000;"&gt;=&lt;/span&gt; IsolatedStorageFile&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;GetUserStoreForApplication&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
        &lt;span style="color: #0600FF; font-weight: bold;"&gt;using&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;IsolatedStorageFileStream stream &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; IsolatedStorageFileStream&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #666666;"&gt;&amp;quot;IsolatedExampleApp.txt&amp;quot;&lt;/span&gt;, FileMode&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Create&lt;/span&gt;, FileAccess&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Write&lt;/span&gt;, store&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
        &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
          XmlSerializer serializer &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; XmlSerializer&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;typeof&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;IsolatedDatabase&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
          serializer&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Serialize&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;stream, &lt;span style="color: #0600FF; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
        &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
        &lt;span style="color: #0600FF; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #0600FF; font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
      &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
      &lt;span style="color: #0600FF; font-weight: bold;"&gt;catch&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;Exception ex&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
      &lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
        &lt;span style="color: #0600FF; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #0600FF; font-weight: bold;"&gt;false&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
      &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
    &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
  &lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;As you can see from the code above, as you develop more data stores, the code needs updating in multiple locations.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Properties need setting for each one (they are the publicly available access points for the data).&lt;/li&gt;
&lt;li&gt;Any LISTS&amp;lt;&amp;gt; require their lists initialised by the Constructor method.&lt;/li&gt;
&lt;li&gt;When the data is &amp;#8216;Load()&amp;#8217;ed, each property must have it&amp;#8217;s values manually set.&lt;/li&gt;
&lt;li&gt;All the Models still need defining elsewhere in your application (in my example above, they are in the IsolatedExampleApp.Data.Models namespace.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you can overlook this repeated typing, then this seems to be a good starting point for persisting data in your Windows Phone 7 Application. To use it should then be fairly straight forward.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="csharp" style="font-family:monospace;"&gt;_db &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; IsolatedDatabase&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
_db&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Load&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #008080; font-style: italic;"&gt;// Adding an album...&lt;/span&gt;
_db&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Albums&lt;/span&gt;&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Add&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;newAlbum&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
_db&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Save&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #008080; font-style: italic;"&gt;// Deleting an album...&lt;/span&gt;
_db&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Albums&lt;/span&gt;&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Remove&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;deleteAlbum&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
_db&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Save&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #008080; font-style: italic;"&gt;// Add or Update an album...&lt;/span&gt;
Album existingAlbum &lt;span style="color: #008000;"&gt;=&lt;/span&gt; _db&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Albums&lt;/span&gt;&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0600FF; font-weight: bold;"&gt;Where&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;x &lt;span style="color: #008000;"&gt;=&amp;gt;&lt;/span&gt; x&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ID&lt;/span&gt; &lt;span style="color: #008000;"&gt;==&lt;/span&gt; album&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ID&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;FirstOrDefault&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&lt;span style="color: #0600FF; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;existingAlbum &lt;span style="color: #008000;"&gt;!=&lt;/span&gt; &lt;span style="color: #0600FF; font-weight: bold;"&gt;null&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;#123;&lt;/span&gt;
  Delete&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;existingAlbum&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&lt;span style="color: #008000;"&gt;&amp;#125;&lt;/span&gt;
Add&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;album&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
_db&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Save&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #008080; font-style: italic;"&gt;// Or just getting a specific album...&lt;/span&gt;
IEnumerable albums &lt;span style="color: #008000;"&gt;=&lt;/span&gt; _db&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Albums&lt;/span&gt; &lt;span style="color: #0600FF; font-weight: bold;"&gt;as&lt;/span&gt; IEnumerable&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&lt;span style="color: #0600FF; font-weight: bold;"&gt;return&lt;/span&gt; albums&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0600FF; font-weight: bold;"&gt;Where&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;x &lt;span style="color: #008000;"&gt;=&amp;gt;&lt;/span&gt; x&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ID&lt;/span&gt; &lt;span style="color: #008000;"&gt;==&lt;/span&gt; id&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;FirstOrDefault&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Any feedback, thoughts, options and optimisations for the above code will be well received. Happy isolating!&lt;/p&gt;
&lt;p&gt;Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://amadiere.com/blog/2010/08/windows-phone-7-getting-started-link-dump/' rel='bookmark' title='Windows Phone 7: Getting Started Link-dump'&gt;Windows Phone 7: Getting Started Link-dump&lt;/a&gt; &lt;small&gt;One of the things Microsoft will be hoping on is...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://amadiere.com/blog/2010/11/htc-hd7-windows-phone-7-vs-apple-iphone-4-ios-4/' rel='bookmark' title='HTC HD7 (Windows Phone 7) vs Apple iPhone 4 (iOS 4)'&gt;HTC HD7 (Windows Phone 7) vs Apple iPhone 4 (iOS 4)&lt;/a&gt; &lt;small&gt;...when Microsoft announced that they would be launching themselves into...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fIu5tkhnH8F8Tp-HE6Z15W7DG8U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fIu5tkhnH8F8Tp-HE6Z15W7DG8U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fIu5tkhnH8F8Tp-HE6Z15W7DG8U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fIu5tkhnH8F8Tp-HE6Z15W7DG8U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Amadiere/~4/BBF8S2RpgDg" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://amadiere.com/blog/2010/09/isolated-storage-on-windows-phone-7/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://amadiere.com/blog/2010/09/isolated-storage-on-windows-phone-7/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://amadiere.com/blog/2010/09/isolated-storage-on-windows-phone-7/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alex Holt</name>
						<uri>http://amadiere.com</uri>
					</author>
		<title type="html"><![CDATA[Windows Phone 7: Getting Started Link-dump]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Amadiere/~3/kTieR_A8MJg/" />
		<id>http://amadiere.com/blog/?p=294</id>
		<updated>2010-08-30T16:25:23Z</updated>
		<published>2010-08-30T16:25:23Z</published>
		<category scheme="http://amadiere.com/blog" term="Windows Phone 7" />		<summary type="html"><![CDATA[One of the things Microsoft will be hoping on is a massive uptake of application developers, and to try and encourage that they've released and helped circulate a bunch of things to the community! This post hopes to point to some of the articles, videos, blogs and other sites by both Microsoft and others to help you learn and get started with WP7.
Related posts:<ol>
<li><a href='http://amadiere.com/blog/2010/11/htc-hd7-windows-phone-7-vs-apple-iphone-4-ios-4/' rel='bookmark' title='HTC HD7 (Windows Phone 7) vs Apple iPhone 4 (iOS 4)'>HTC HD7 (Windows Phone 7) vs Apple iPhone 4 (iOS 4)</a> <small>...when Microsoft announced that they would be launching themselves into...</small></li>
<li><a href='http://amadiere.com/blog/2010/09/isolated-storage-on-windows-phone-7/' rel='bookmark' title='Isolated Storage on Windows Phone 7'>Isolated Storage on Windows Phone 7</a> <small>As Windows Phone 7 doesn't have an SQL Server edition...</small></li>
</ol>]]></summary>
		<content type="html" xml:base="http://amadiere.com/blog/2010/08/windows-phone-7-getting-started-link-dump/">&lt;p&gt;&lt;img class="alignright" title="Windows Phone 7" src="http://amadiere.com/images/blog/windows-phone-7.jpg" alt="Windows Phone 7" width="200" /&gt;As you&amp;#8217;re probably aware, Microsoft is finally going to attempt to enter the Smart Phone OS market with it&amp;#8217;s new Windows Phone 7 operating system /platform / ecosystem. It&amp;#8217;s going to have a hard time getting started (Android and particularly the iPhone OS have a gigantic lead and devoted user-base), but I think it has a good chance. Looking at some of the reviews of the hardware and it&amp;#8217;s performance with the new OS, things are looking promising for the big M, if that is, they can pull off the marketing and get enough hardware vendors on-board.&lt;/p&gt;
&lt;p&gt;One of the things Microsoft will be hoping on is a massive uptake of application developers, and to try and encourage that they&amp;#8217;ve released and helped circulate a bunch of things to the community! This post hopes to point to some of the articles, videos, blogs and other sites by both Microsoft and others to help you learn and get started with WP7.&lt;/p&gt;
&lt;p&gt;Obviously, before you get started, you want to download the various &lt;strong&gt;developer tools&lt;/strong&gt;. They are currently in &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c8496c2a-54d9-4b11-9491-a1bfaf32f2e3&amp;amp;displaylang=en"&gt;Beta and downloadable here&lt;/a&gt;. It&amp;#8217;s been announced that the full non-Beta set of tools on the &lt;strong&gt;16 September 2010&lt;/strong&gt;. The tools are free &amp;#8211; the only bit you pay for is a subscription that allows you to post applications to the Marketplace. That&amp;#8217;s currently being listed as £67 GBP&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://windowsteamblog.com/windows_phone/b/wpdev/"&gt;Windows Phone 7 Developer Blog&lt;/a&gt; &amp;#8211; very useful for keeping up to date with the releases and anything other major happening for the platform.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.windowsphone.com/"&gt;Windows Phone 7 Developer Portal&lt;/a&gt; (&lt;a href="http://developer.windowsphone.com/"&gt;developer.windowsphone.com&lt;/a&gt;) &amp;#8211; another good site for finding videos and other related training materials.&lt;/li&gt;
&lt;li&gt;Promotional website for consumers appears to be at &lt;a href="http://www.microsoft.com/windowsmobile/en-gb/default.mspx"&gt;Microsoft/WindowsPhone&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Scott Hanselman&amp;#8217;s &amp;#8220;&lt;a href="http://vimeo.com/13727802"&gt;Walkthrough of the Developer Phone&lt;/a&gt;&amp;#8221; shows some of features of the phone after getting one of the preview devices.&lt;/li&gt;
&lt;li&gt;Detailed &lt;a href="http://www.engadget.com/2010/07/19/windows-phone-7-in-depth-preview/"&gt;review from Engadget.com on a Samsung device using Windows Phone 7&lt;/a&gt; &amp;#8211; very promising outcome, marred only by a few minor let downs (basically, the absence of Multi-tasking and Cut-and-Paste).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Videos &amp;amp; Labs&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/learn/courses/WP7TrainingKit/WP7GettingStarted/HelloPhoneWP7Lab/"&gt;Hello Windows Phone 7&lt;/a&gt;! the obligatory &amp;#8220;Hello World!&amp;#8221; application.&lt;/li&gt;
&lt;li&gt;Microsoft&amp;#8217;s Channel 9 has a great series hosted by Andy Wigley and &lt;a href="http://www.robmiles.com"&gt;Rob Miles&lt;/a&gt; called &amp;#8220;&lt;a href="http://channel9.msdn.com/posts/egibson/Windows-Phone-7-Jump-Start-Session-1-of-12-Introduction/"&gt;Jump Start&lt;/a&gt;&amp;#8220;. If you like video tutorials and talk through&amp;#8217;s, this is a great starting point. There are som&lt;a href="http://borntolearn.mslearn.net/wp7/m/classresources/default.aspx"&gt;e resources available for download&lt;/a&gt; as well to help you along the way. As far as things go, I can&amp;#8217;t recommend this enough. It&amp;#8217;s a great set of tutorials that seems to cover a wide area of the platform without going into great amounts of detail about each bit, choosing (wisely) to only wiz along the surface. All the videos are downloadable in a number of formats, including the useful MP4 for sticking on your iPhone (until such a time as you can get your mits on a Windows Phone 7 device of course!):
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/egibson/Windows-Phone-7-Jump-Start-Session-1-of-12-Introduction/"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/egibson/Windows-Phone-7-Jump-Start-Session-2-of-12-Building-a-Silverlight-Application-Part-1/"&gt;Building a Silverlight Application (Part 1)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/egibson/Windows-Phone-7-Jump-Start-Session-3-of-12-Building-a-Silverlight-Application-Part-2/"&gt;Building a Silverlight Application (Part 2)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/egibson/Windows-Phone-7-Jump-Start-Session-4-of-12-Building-Games-for-the-Windows-Phone-7-Platform/"&gt;Building Games for the Windows Phone 7 Platform&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/egibson/Windows-Phone-7-Jump-Start-Session-5-of-12-Building-XNA-Games-for-the-Windows-Phone-7-Platform-Part-/"&gt;Building XNA Games for the Windows Phone 7 Platform (Part 1)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/egibson/Windows-Phone-7-Jump-Start-Session-6-of-12-Building-XNA-Games-for-the-Windows-Phone-7-Platform-Part-/"&gt;Building XNA Games for the Windows Phone 7 Platform (Part 2)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/egibson/Windows-Phone-7-Jump-Start-Session-7-of-12-Advanced-Application-Development-Part-1/"&gt;Advanced Application Development (Part 1)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/egibson/Windows-Phone-7-Jump-Start-Session-8-of-12-Advanced-Application-Development-Part-2/"&gt;Advanced Application Development (Part 2)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/egibson/Windows-Phone-7-Jump-Start-Session-9-of-12-Advanced-Application-Development-Part-3/"&gt;Advanced Application Development (Part 3)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/egibson/Windows-Phone-7-Jump-Start-Session-10-of-12-Marketing-Your-Windows-Phone-7-Application/"&gt;Marketing Your Windows Phone 7 Application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/egibson/Windows-Phone-7-Jump-Start-Session-11-of-12-Working-with-Media/"&gt;Working With Media&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/egibson/Windows-Phone-7-Jump-Start-Session-12-of-12-Final-Silverlight-Topics-and-Wrap-Up/"&gt;Final Silverlight Topics and Wrap-up&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/learn/courses/WP7TrainingKit/"&gt;Windows Phone 7 Developer Training Kit&lt;/a&gt; &amp;#8211; a bunch of labs and tutorials, maybe not as good as the Jump Start stuff, but still good and varied enough to give you a nice overview of all the features &lt;img src='http://amadiere.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; &lt;/li&gt;
&lt;li&gt;Coding 4 Fun: &lt;a href="http://blogs.msdn.com/b/coding4fun/archive/2010/06/15/10025512.aspx"&gt;Building a &amp;#8220;Shuffleboard&amp;#8221; application using Silverlight&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;MSDev.com has a bucket full of bitesize videos in a collection named &amp;#8220;&lt;a href="http://www.msdev.com/Directory/SeriesDescription.aspx?CourseId=158"&gt;Windows Phone 7 in 7 Minutes&lt;/a&gt;&amp;#8220;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;More resources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=3a8636bf-185f-449a-a0ce-83502b9ec0ec"&gt;Creating High Performance Silverlight Applications for Windows Phone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=47&amp;amp;p=1&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=3a8636bf-185f-449a-a0ce-83502b9ec0ec&amp;amp;u=details.aspx%3ffamilyid%3d369B20F7-9D30-4CFF-8A1B-F80901B2DA93%26displaylang%3den"&gt;Application Bar Icons for Windows Phone 7&lt;/a&gt; &amp;#8211; a bunch of useful icon&amp;#8217;s that you may want to use in your application.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=40&amp;amp;p=2&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=369b20f7-9d30-4cff-8a1b-f80901b2da93&amp;amp;u=http%3a%2f%2fgo.microsoft.com%2f%3flinkid%3d9713252"&gt;UI Design and Interaction Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Again, Scott Hanselman, this time on his great Hanselminute&amp;#8217;s Podcast he covers &lt;a href="http://www.hanselman.com/blog/HanselminutesPodcast228PerformanceOfSilverlightOnWindowsPhone7.aspx"&gt;Silverlight performance on Windows Phone 7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jeff.wilcox.name/2010/08/looking-ahead-at-panorama-and-pivot/"&gt;Panorama &amp;amp; Pivot are coming soon&lt;/a&gt;, more information is available from Jeff Wilcox.&lt;/li&gt;
&lt;li&gt;With the absence of SQL on the Windows Phone 7 (at least initially), there is a market for some free libraries to make relational data management considerably easier. So far, two of the better ones are &lt;a href="http://sterling.codeplex.com/documentation"&gt;Sterling&lt;/a&gt; and &lt;a href="http://mobileworld.appamundi.com/blogs/andywigley/archive/2010/06/07/perst-a-database-for-windows-phone-7-silverlight.aspx"&gt;Perst&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://amadiere.com/blog/2010/11/htc-hd7-windows-phone-7-vs-apple-iphone-4-ios-4/' rel='bookmark' title='HTC HD7 (Windows Phone 7) vs Apple iPhone 4 (iOS 4)'&gt;HTC HD7 (Windows Phone 7) vs Apple iPhone 4 (iOS 4)&lt;/a&gt; &lt;small&gt;...when Microsoft announced that they would be launching themselves into...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://amadiere.com/blog/2010/09/isolated-storage-on-windows-phone-7/' rel='bookmark' title='Isolated Storage on Windows Phone 7'&gt;Isolated Storage on Windows Phone 7&lt;/a&gt; &lt;small&gt;As Windows Phone 7 doesn't have an SQL Server edition...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rYcAcRHTJ8GCsWBpXUaSK2ycj34/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rYcAcRHTJ8GCsWBpXUaSK2ycj34/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rYcAcRHTJ8GCsWBpXUaSK2ycj34/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rYcAcRHTJ8GCsWBpXUaSK2ycj34/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Amadiere/~4/kTieR_A8MJg" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://amadiere.com/blog/2010/08/windows-phone-7-getting-started-link-dump/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://amadiere.com/blog/2010/08/windows-phone-7-getting-started-link-dump/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://amadiere.com/blog/2010/08/windows-phone-7-getting-started-link-dump/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Alex Holt</name>
						<uri>http://amadiere.com</uri>
					</author>
		<title type="html"><![CDATA[Development SMTP Servers for IIS7.5 on Windows 7]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Amadiere/~3/ivD8mftIlN4/" />
		<id>http://amadiere.com/blog/?p=288</id>
		<updated>2010-04-06T14:43:59Z</updated>
		<published>2010-04-06T14:43:59Z</published>
		<category scheme="http://amadiere.com/blog" term="ASP.NET" /><category scheme="http://amadiere.com/blog" term="C#" /><category scheme="http://amadiere.com/blog" term="IIS" /><category scheme="http://amadiere.com/blog" term="SMTP" /><category scheme="http://amadiere.com/blog" term="Smtp4Dev" /><category scheme="http://amadiere.com/blog" term="Windows7" />		<summary type="html"><![CDATA[For some reason, Microsoft decided they didn't want to include the SMTP Server in Windows 7 anymore (even 'Ultimate' - it might also be the case for Windows Vista). So, I had to find an alternative.
No related posts.]]></summary>
		<content type="html" xml:base="http://amadiere.com/blog/2010/04/development-smtp-servers-for-iis7-5-on-windows-7/">&lt;p&gt;I&amp;#8217;ve had one of them days. You know? That &amp;#8220;simple task&amp;#8221; that spiralled out of control and resulted in me losing half a day to it&amp;#8217;s tricks! That task? It was sending an email from an ASP.NET (MVC2) application. Previously, I&amp;#8217;ve always done this via setting up IIS and the SMTP server in there, but for some reason, Microsoft decided they didn&amp;#8217;t want to include the SMTP Server in Windows 7 anymore (even &amp;#8216;Ultimate&amp;#8217; &amp;#8211; it might also be the case for Windows Vista). So, I had to find an alternative.&lt;/p&gt;
&lt;p&gt;There were a few options available to me:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SMTP Server on Localhost: &lt;/strong&gt;This was the obvious choice, but after trying Mercury Mail and it&amp;#8217;s quarter of a million settings as it installed (I&amp;#8217;m no Email Admin, so didn&amp;#8217;t know the answer to all of them). It didn&amp;#8217;t work and I&amp;#8217;m not sure why. To rub salt into the would, there was no uninstall either &amp;#8211; it proper irritated me and I gave up using it out of principal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SMTP Server on Localhost that is really just a Relay. &lt;/strong&gt;Well, sounded good &amp;#8211; but again, it was designed by people with bigger brains than me and it failed to send to what I thought was a correctly configured IIS7.5 config pointing to my GMail account.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fake Server: &lt;/strong&gt;Something that doesn&amp;#8217;t actually send emails, but pretends to.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The last one is the one I eventually choose and boy am I glad I did! I downloaded the excellent &lt;a href="http://smtp4dev.codeplex.com/"&gt;SMTP 4 DEV from Codeplex&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I don&amp;#8217;t have 100&amp;#8242;s of emails cluttering up my email box for starters. &lt;strong&gt;Win!&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;It was so easy to set-up and it worked perfectly without a change to my code. &lt;strong&gt;Win!&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;It&amp;#8217;s free. &lt;strong&gt;Win!&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here is some fake code that should send an email to the &lt;em&gt;localhost&lt;/em&gt;.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="csharp" style="font-family:monospace;"&gt;MailMessage emailMessage &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; MailMessage&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&lt;span style="color: #6666cc; font-weight: bold;"&gt;string&lt;/span&gt; messageBody &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;"&gt;&amp;quot;This is the content of the email will be awesome!&amp;quot;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&amp;nbsp;
emailMessage&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Body&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; messageBody&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
emailMessage&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Priority&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; MailPriority&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Normal&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
emailMessage&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0600FF; font-weight: bold;"&gt;From&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; MailAddress&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #666666;"&gt;&amp;quot;no-reply@amadiere.com&amp;quot;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt; &lt;span style="color: #008080; font-style: italic;"&gt;// obviously, this email address doesn't exist :)&lt;/span&gt;
emailMessage&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Subject&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;"&gt;&amp;quot;The answer is 42&amp;quot;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
emailMessage&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;IsBodyHtml&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #0600FF; font-weight: bold;"&gt;false&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&amp;nbsp;
SmtpClient mSmtpClient &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; SmtpClient&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
mSmtpClient&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Host&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;  &lt;span style="color: #008080; font-style: italic;"&gt;// localhost&lt;/span&gt;
mSmtpClient&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;DeliveryMethod&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; SmtpDeliveryMethod&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Network&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;
&amp;nbsp;
mSmtpClient&lt;span style="color: #008000;"&gt;.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;Send&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;#40;&lt;/span&gt;emailMessage&lt;span style="color: #008000;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;No related posts.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZwB7Q8TF-DKCuPrPLiZk3yaJP14/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZwB7Q8TF-DKCuPrPLiZk3yaJP14/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZwB7Q8TF-DKCuPrPLiZk3yaJP14/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZwB7Q8TF-DKCuPrPLiZk3yaJP14/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Amadiere/~4/ivD8mftIlN4" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://amadiere.com/blog/2010/04/development-smtp-servers-for-iis7-5-on-windows-7/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://amadiere.com/blog/2010/04/development-smtp-servers-for-iis7-5-on-windows-7/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://amadiere.com/blog/2010/04/development-smtp-servers-for-iis7-5-on-windows-7/</feedburner:origLink></entry>
	</feed><!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->

