<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Brad Abrams  : AjaxWorld</title><link>http://blogs.msdn.com/brada/archive/tags/AjaxWorld/default.aspx</link><description>Tags: AjaxWorld</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Enabling Firefox support in Visual Studio 2008</title><link>http://blogs.msdn.com/brada/archive/2008/10/28/enabling-firefox-support-in-visual-studio-2008.aspx</link><pubDate>Wed, 29 Oct 2008 09:44:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9021725</guid><dc:creator>BradA</dc:creator><slash:comments>16</slash:comments><comments>http://blogs.msdn.com/brada/comments/9021725.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=9021725</wfw:commentRss><description>&lt;p&gt;In the comments &lt;a href="http://blogs.msdn.com/brada/archive/2008/10/19/ajaxworld-talk-building-a-great-ajax-application-from-scratch.aspx"&gt;on a recent post&lt;/a&gt; a reader asked me how to enabled Firefox in Visual Studio 2008..&amp;#160;&amp;#160; Luckily it is very easy..&amp;#160;&amp;#160; You right click on the aspx page and select &amp;quot;Browser With&amp;quot;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/EnablingFirefoxsupportinVisualStudio2008_8D3D/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="346" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/EnablingFirefoxsupportinVisualStudio2008_8D3D/image_thumb.png" width="202" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Then select &amp;quot;FireFox&amp;quot;... You can also make it the default with the &amp;quot;Set as Default&amp;quot; button. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/EnablingFirefoxsupportinVisualStudio2008_8D3D/image_4.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="213" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/EnablingFirefoxsupportinVisualStudio2008_8D3D/image_thumb_1.png" width="281" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9021725" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/brada/archive/tags/AjaxWorld/default.aspx">AjaxWorld</category></item><item><title>AjaxWorld Talk: Building Rich Internet Applications Using Microsoft Silverlight 2</title><link>http://blogs.msdn.com/brada/archive/2008/10/20/ajaxworld-talk-building-rich-internet-applications-using-microsoft-silverlight-2.aspx</link><pubDate>Tue, 21 Oct 2008 08:16:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9008727</guid><dc:creator>BradA</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/brada/comments/9008727.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=9008727</wfw:commentRss><description>&lt;p&gt;It was another fun day &lt;a href="http://ajaxworld.com/"&gt;AjaxWorld&lt;/a&gt;.&amp;#160; I had a good time during my talk &lt;a href="http://silverlight.net/"&gt;Silverlight 2&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Silverlight is a cross-browser, cross-platform, cross-device.&amp;#160; Plug-in for building and delivering the next generation of .NET based media experiences and rich interactive applications for the Web.&lt;/p&gt;  &lt;p&gt;Silverlight does not require Windows, .NET or IIS on the server.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="210" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb.png" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Silverlight 2 just shipped a few days ago, and already we have some great customers going live. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.nbcolympics.com/video/share.html?videoid=0808_hd_ocb_en006 "&gt;NBC Olympics&lt;/a&gt;&lt;/strong&gt;&amp;#160; - NBC hosted the Olympics live on &lt;a href="http://nbcolympics.com"&gt;nbcolympics.com&lt;/a&gt; and served up 1.3 billion page views, 70 million video streams, and 600 million minutes of video content - making it the largest ever media event on the web.&amp;#160; Users visiting the site spent an average of 27 minutes on the site when they watched a video - an unprecedented number for online traffic.&lt;/p&gt;  &lt;p&gt;Notice the use of immediate seek to anywhere in the stream and adaptive streaming that gives you just the right bit-rate content for your connection. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="173" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_1.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.demconvention.com/ "&gt;Democratic National Convention&lt;/a&gt;&lt;/strong&gt; - In August, the Democratic National Convention was streamed live using Silverlight, and broadcast a 2Mbit live video feed of the event and speeches - receiving outstanding feedback from audiences watching it.&lt;/p&gt;  &lt;p&gt;This video was delivered live to millions of viewers all over the world at higher quality and bit rate than traditional TV.&amp;#160; Now, all the content is available for viewing on demand.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="197" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_2.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://memorabilia.hardrock.com/"&gt;Hard Rock&lt;/a&gt;&amp;#160; - The folks at Hard Rock have the world's&amp;#160; largest collection of Rock-and-roll memorial in the world.&amp;#160; They hired the good folks at &lt;a href="http://www.vertigo.com/"&gt;vertigo&lt;/a&gt; to build.&amp;#160; Notice how the gigabytes of images are easy to zoom into and pan around.&amp;#160; All streaming download of images...&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_10.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="208" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_4.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_8.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="208" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_3.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.mscui.net/PatientJourneyDemonstrator/"&gt;Health Care Demonstrator&lt;/a&gt; - This is an example app that shows how to build a great line of business application with Silverlight.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_12.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="178" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_5.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.innoveware.com/ql/640/QuakeLight.html "&gt;Quake Game&lt;/a&gt; - Check out this very cool Quake game in Silverlight.&amp;#160; Look at the frame rate... even in full screen!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_56.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_27.png" width="241" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Next I showed the latest progress on &lt;a href="http://www.mono-project.com/Moonlight"&gt;Moonlight&lt;/a&gt; with a &lt;a href="http://www.opensuse.org/en/"&gt;Linux openSUSE&lt;/a&gt; 11.0 VPC (thanks &lt;a href="http://tirania.org/blog/"&gt;Miguel&lt;/a&gt;!)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_52.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="195" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_25.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_48.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="195" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_23.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_50.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="195" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_24.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Next, I built a very simple Silverlight 2 application in &lt;a href="http://www.eclipse4sl.org/"&gt;Eclipse using the Eclipse Tools for Silverlight&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;First we create a new Silverlight project in Eclipse.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_58.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="184" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_28.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now, we just drag the button from the toolbox in Eclipse&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_60.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="196" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_29.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice we get autocompletion in the source view in Eclipse&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_62.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="126" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_30.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then we can easily handle the click event in Eclipse&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_64.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="127" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_31.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then in code view, we get auto completion and error reporting in C# in Eclipse.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_66.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="182" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_32.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Next I built a simple Silverlight 2 application from scratch in the free VS2008... &lt;/p&gt;  &lt;p&gt;For this demo, I only used freely available tools... In particular everything I show works in &lt;a href="http://www.microsoft.com/express/vwd/default.aspx"&gt;Visual Studio 2008 Web Developer Express&lt;/a&gt; and the &lt;a href="http://go.microsoft.com/fwlink/?LinkId=129043"&gt;Silverlight Tools for Visual Studio 2008&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/Projects/AjaxWorld08/SilverlightExample.zip"&gt;Download the complete sample&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;File, New Project&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_14.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="161" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_6.png" width="240" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Next you can select what server side project to associated your Silverlight app with.&amp;#160; Notice you can even have one dyamically generated for you.&amp;#160; Also, notice you don't need .NET on the server, in fact you can deploy Silverlight from a Linux server.. all you need is http.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_16.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="218" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_7.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_18.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="175" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_8.png" width="240" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice the client and web project in the same solution and the Xaml view and the preview view.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_20.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="237" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_9.png" width="240" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice the great Xaml intellisense.&amp;#160; &lt;/p&gt;  &lt;div&gt;&amp;#160;&lt;/div&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_22.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="138" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_10.png" width="393" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now we get to write client side C# code... we can even do breakpoints, etc.&amp;#160; &lt;/p&gt;  &lt;div&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; btn1_Click(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
{
    btn1.Content = &lt;span style="color: #006080"&gt;&amp;quot;Oach!&amp;quot;&lt;/span&gt;;
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Now, check out the server project, it includes ClientBin with a Silverlight.xap file that includes our clientside code... The cool thing is this is just a zip file... so you can see inside it easily.&amp;#160; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_24.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="180" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_11.png" width="240" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Run it and check it out!&amp;#160; works perfectly.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_26.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="206" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_12.png" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;But this is Silverlight, let's see if we can make it a little more sexy.&amp;#160; Let's open it up in Express Blend.&amp;#160; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_28.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_13.png" width="217" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Notice Blend is built for Designers... &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_30.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="179" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_14.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Let's make the design surface a little bigger then do some gradients&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_32.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="179" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_15.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;and finally a motion path..&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_36.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="179" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_17.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The great thing is the project just refreshes in VS&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_34.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="227" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_16.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now we need to get some real data into this app.&amp;#160; &lt;/p&gt;

&lt;p&gt;First we add a datagrid (we put it and the button in a StackPanel)&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;StackPanel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
 &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Button&lt;/span&gt; &lt;span style="color: #ff0000"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;btn1&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Width&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;100&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Height&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;50&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Content&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Push Me!&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Click&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;btn1_Click&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;49,73,0,0&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;d:LayoutOverrides&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Width, Height&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Top&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Left&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;RenderTransformOrigin&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;0.5,0.5&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Button.RenderTransform&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TransformGroup&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
             &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ScaleTransform&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
             &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;SkewTransform&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
             &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;RotateTransform&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Angle&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;-49.157&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
             &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TranslateTransform&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
         &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;TransformGroup&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Button.RenderTransform&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
 &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Button&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
 
 &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;data:DataGrid&lt;/span&gt;  &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;datagrid1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;data:DataGrid&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;StackPanel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Then we go to the server project and add some data..&amp;#160; In this case an Entity Framework data model.&amp;#160;&amp;#160; This let's us use LINQ to get access to the data rather than doing queries in code rather than in T-SQL.&amp;#160; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_38.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="217" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_18.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Select the employees tables we need then, you get this view in the designer.&amp;#160;&amp;#160; Notice the Photo filed is too big to pass to the client, so we can just remove it here.&amp;#160; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_40.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="237" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_19.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now let's add a web service to pass this to data to the client.&amp;#160; Let's add a Silverlight-enabled WCF service. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_42.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="148" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_20.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;[ServiceContract(Namespace = &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; NorthwindService
{
    [OperationContract]
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; IEnumerable&amp;lt;Employee&amp;gt; GetEmployees(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; nameContains)
    {
        var db = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; NORTHWNDEntities();
        var q = from emp &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; db.EmployeeSet
                &lt;span style="color: #0000ff"&gt;where&lt;/span&gt; emp.FirstName.Contains(nameContains)
                orderby emp.LastName ascending
                select emp;
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; q.ToList();
    }

}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_44.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="197" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_21.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; btn1_Click(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
{
    var client = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ServiceReference1.NorthwindServiceClient();
    client.GetEmployeesCompleted += 
        &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; EventHandler&amp;lt;GetEmployeesCompletedEventArgs&amp;gt;(client_GetEmployeesCompleted);
    client.GetEmployeesAsync(&lt;span style="color: #006080"&gt;&amp;quot;b&amp;quot;&lt;/span&gt;);

    btn1.Content = &lt;span style="color: #006080"&gt;&amp;quot;Oach!&amp;quot;&lt;/span&gt;;
    Storyboard1.Begin();

}

&lt;span style="color: #0000ff"&gt;void&lt;/span&gt; client_GetEmployeesCompleted(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, GetEmployeesCompletedEventArgs e)
{
    datagrid1.ItemsSource = e.Result;
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Notice the column reordering, editable cells, sorting, etc.&amp;#160; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_46.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="197" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingRichInternetApplica_12119/image_thumb_22.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Hope you enjoyed it!&amp;#160; Here is the &lt;a href="http://brad_abrams.members.winisp.net/Projects/AjaxWorld08/SilverlightExample.zip"&gt;completed sample&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9008727" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/AjaxWorld/default.aspx">AjaxWorld</category><category domain="http://blogs.msdn.com/brada/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>AjaxWorld Talk: Building a Great Ajax application from Scratch</title><link>http://blogs.msdn.com/brada/archive/2008/10/19/ajaxworld-talk-building-a-great-ajax-application-from-scratch.aspx</link><pubDate>Mon, 20 Oct 2008 06:45:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9006810</guid><dc:creator>BradA</dc:creator><slash:comments>28</slash:comments><comments>http://blogs.msdn.com/brada/comments/9006810.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=9006810</wfw:commentRss><description>&lt;p&gt;I had a great time today at &lt;a href="http://ajaxworld.com/"&gt;AjaxWorld&lt;/a&gt; during my talk on building a great Ajax Application from Scratch.&amp;#160; It was fun to get out from behind the powerpoint and show some real code!&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;For this demo, I only used freely available tools... In&amp;#160; particular everything I show works in &lt;a href="http://www.microsoft.com/express/vwd/default.aspx"&gt;Visual Studio 2008 Web Developer Express&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Peter Galli posts on &lt;a href="http://port25.technet.com/archive/2008/10/20/microsoft-at-ajaxworld.aspx"&gt;Microsoft's general presence at AjaxWorld&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The folks at sys-con already posted a quick story on my talk:&amp;#160; &lt;/p&gt; &lt;a href="http://au.sys-con.com/node/716788"&gt;Presented A No-Slides, Code Only Session at AJAXWorld&lt;/a&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Download &lt;a href="http://brad_abrams.members.winisp.net/Projects/AjaxWorld08/AjaxAppDemoFiles.zip"&gt;the complete samples&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;Part I:&amp;#160; CSS and HTML Designer&lt;/h2&gt;  &lt;p&gt;First, I showed off what a great CSS and HTML designer &lt;a href="http://www.microsoft.com/express/vwd/default.aspx"&gt;Visual Studio 2008&lt;/a&gt; is.&amp;#160; For this part of the demo I didn't use any ASP.NET or .NET specific code... All of this works great with plain old HTML and CSS... &lt;/p&gt;  &lt;p&gt;Download and Install &lt;a href="http://www.microsoft.com/express/vwd/default.aspx"&gt;Visual Web Developer Express (free)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;File\New Project and select the ASP.NET Web Application&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="161" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb.png" width="240" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Then I dragged in some HTML to start with, and a directory of Image..&lt;/p&gt;  &lt;p&gt;I showed off VS's split view... how you can type or highlight in the design view and have it show in the code view (and vice-versa).. This is an excellent feature for tracking down what markup corresponds what visual element. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="240" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_1.png" width="218" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;OK - now what we really want is a nice grid-like display rather than the single list.&amp;#160; To do this, let's use standards based CSS that works cleanly in any browser. &lt;/p&gt;  &lt;p&gt;I'll use VS 2008's great new CSS support.&amp;#160; I used the Manage Styles panel to create a new CSS Selector...&amp;#160; Notice I use &amp;quot;.photolist li&amp;quot; this rule will apply to any li inside an element with the class photolist.&amp;#160; &lt;/p&gt;  &lt;p&gt;Also, notice we can select where to define the css rules in.&amp;#160; I have selected in a new style sheet. VS will create the new style sheet and (optionally) reference it from the current page.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="219" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_2.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In this case, I create a new style sheet and VS automatically add a reference to it from my HTML document. &lt;/p&gt;  &lt;p&gt;Then notice, back in the HTML editor I get great intellisense.. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/clip_image002_2.gif"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="83" alt="clip_image002" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/clip_image002_thumb.gif" width="240" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now, I can open up the CSS file and see how clean it is?&amp;#160; Also, notice I can do code-focused editing of the CSS rather than use the designers.&amp;#160; Again, I get great help from VS.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/clip_image002%5B5%5D.gif"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="172" alt="clip_image002[5]" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/clip_image002%5B5%5D_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Next, in design view, I click on an image... notice the breadcrumb at the bottom of VS shows you where you are in the visual tree.&amp;#160; Hit escape to navigate up the tree until the list item (li) is selected.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_8.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="114" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_3.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;We want this to layout like a grid, so in the CSS Properties window, under Layout, set Display to &amp;quot;inline&amp;quot; and float to &amp;quot;left&amp;quot;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_10.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="185" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_4.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;That looks pretty good, but we need a bit more padding, so let's use the grab-handles in the designer to give us a little more spacing... &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_12.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="194" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_5.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Again, notice how all these edits are cleanly going into the attached CSS style sheet rather than gunking up our code.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_14.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="199" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_6.png" width="202" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Finally, let's make this look really nice by throwing it a MasterPage will will give a common look and feel across our site.&amp;#160; We will do this by dragging in Site.master and Site.Master.cs.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_24.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_11.png" width="219" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And we are starting go have something that looks sort of nice!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_26.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_12.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;Part II:&amp;#160; Data access with Linq&lt;/h2&gt;  &lt;p&gt;OK, that was great, but in a real world site you don't deal with static images... you need to pull data out of a database.&amp;#160;&amp;#160; So let's change the site around a bit to pull data from a database. &lt;/p&gt;  &lt;p&gt;First, I will drag in photos.mdb into App_Data, this is a SqlServer database that I created for this demo... I will use the free Sql Express to allow me to use it at development time.&lt;/p&gt;  &lt;p&gt;As you can see it is a simple database.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/clip_image002%5B9%5D.gif"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="184" alt="clip_image002[9]" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/clip_image002%5B9%5D_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now, as a .NET developer, I'd really like to operate against this database as a set of .NET types rather than having to remember and debug some T-Sql code in my .NET code.&amp;#160; Luckily Linq solves this for me!&lt;/p&gt;  &lt;p&gt;To add a Linq data model for this database... Add New Item, then select ADO.NET Entity Data Model&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_16.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="138" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_7.png" width="227" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;We select to work from a database, then the Entity Framework designer knows we have a Sql Express database in the project and defaults to using it.&amp;#160; Notice EF support TONs of different databases including MySql and Orcale!&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_18.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="217" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_8.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then we select what tables we want to include in our model.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_20.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="217" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_9.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Then you see the design surface showing you what the designer created.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_22.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_10.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is the view of your .NET types that represent your database.&amp;#160; Notice VS picked up on the relationships between the tables.&amp;#160;&amp;#160; You can of course edit these names in this designer view as well.&amp;#160; &lt;/p&gt;  &lt;p&gt;Notice, while this will do direct CRUD operations against the database, it is very possible to encapsulate all access through stored procs if need be.&amp;#160; &lt;/p&gt;  &lt;p&gt;Now, let's go back to the UI and give us some place to put this data.&amp;#160; I will show off the new ListView control in ASP.NET.&amp;#160; &lt;/p&gt;  &lt;p&gt;The way ListView works, is that you give it a layout template that defines exactly how you work the markup to look.&amp;#160; In our case, we will just cut and pate that ul into the layout template and define a place holder of the li's &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_30.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="146" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_14.png" width="388" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now we just need to get some real data.&lt;/p&gt;  &lt;div&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; rating = 2;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;     var db = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; PhotosEntities();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;     var q = from photo &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; db.PhotoSet&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;where&lt;/span&gt; photo.Rating &amp;gt; rating&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;             orderby photo.Tags.FirstOrDefault().TagName descending&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;             select photo;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.lv.DataSource = q;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;     lv.DataBind();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;In line 4, we create the data context... this is the logic connection string for our Linq data model. &lt;/p&gt;

&lt;p&gt;In line 5, we are using C#'s new var keyword which allows us to fudge on the type of the express...the compiler will figure it out... &lt;/p&gt;

&lt;p&gt;In line 6, we are doing a where clause, notice that I am capturing a local variable in that, clearly this example is trivial, but it is a powerful feature. &lt;/p&gt;

&lt;p&gt;in line 7 notice i am ordering by the first tag name, notice how nice this reads?&amp;#160; It would be much harder to do this&amp;#160; in TSQL! &lt;/p&gt;

&lt;p&gt;in line 9 and 10 and I doing the normal databinding. &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_34.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="191" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_16.png" width="728" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now we are really starting to look good!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_36.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="208" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_17.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Now, that is nice, but there are a ton of results here..&amp;#160; we really need a nice way to page through them.&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;

&lt;p&gt;I use the new DataPager control in ASP.NET 3.5..&amp;#160; Notice it can have filed that are simple Next\Prev or numeric or you can even build your own! &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/clip_image002%5B11%5D.gif"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="93" alt="clip_image002[11]" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/clip_image002%5B11%5D_thumb.gif" width="240" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Here is the complete code: &lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:DataPager&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;dp&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;               &lt;span style="color: #ff0000"&gt;PagedControlID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;lv&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Fields&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:NumericPagerField&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Fields&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:DataPager&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Now, we need to ensure that the ListView will show the correct items when the data pager changes.&amp;#160; We do this by adding a PreRender() method to the page.&amp;#160; A simplified view of the page lifecycle is Page_Load(), then the control events are raised, then Page_PreRender() is called.&amp;#160;&amp;#160; In our case the events from the pager need to be raised to change the page before we bind the list. &lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Page_PreRender() { &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    lv.DataBind();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;And notice it works great! &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_38.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="208" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_18.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160; &lt;/p&gt;

&lt;h2&gt;Part III:&amp;#160; Server Side Ajax&lt;/h2&gt;

&lt;p&gt;Now it is time to add a little ajax fun to the site.&amp;#160;&amp;#160; Notice as I page through the items I am getting a little blink?&amp;#160; That is because the page is doing a full post-back to the server when only the images are changing.&amp;#160; It would be great if I could update only the part of the page that is changing!&amp;#160; &lt;/p&gt;

&lt;p&gt;And you can with UpdatePanel. Simply wrap the UpdatePanel's content template around the area of the page that you want to update separately.&amp;#160; the runtime will turn any postbacks into XmlHttp calls, back the the server, get the right HTML and then bring in back and update only the part of the DOM effected.&amp;#160;&amp;#160; Simple. Powerful.&amp;#160; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_40.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="99" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_19.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Oh, and don't forget to add ScriptManager to the top of the page.&amp;#160; This &amp;quot;turns on&amp;quot; the ajax functionality in ASP.NET...&lt;/p&gt;

&lt;pre&gt;&amp;#160;&lt;/pre&gt;

&lt;p&gt;Now the page refreshes much more smoothly.&amp;#160; &lt;/p&gt;

&lt;p&gt;For the demo, we are running against localhost, but in the real world there is network load, congestion on the Internet, etc that may effect your page's responsiveness.&amp;#160;&amp;#160; But you want to give user's an immediate response to their actions... to let them know that something is happening.&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;

&lt;p&gt;You can use a Thread.Sleep (2000) in your page's load method to simulate this sort of load..&amp;#160; &lt;/p&gt;

&lt;p&gt;Enter UpdateProgress...&amp;#160;&amp;#160; This little control listens for calls over XmlHttp and shows a progress template as they go out and takes it down when they come back in...&amp;#160; That plus a little animate gif gives users a great sense of &amp;quot;something happening&amp;quot;.&amp;#160; &lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:UpdateProgress&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;UpdateProgress2&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ProgressTemplate&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;UpdateProgressBox&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;img&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Img2&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;alt&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Loading&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;~/Images/ajax-loader.gif&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ProgressTemplate&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:UpdateProgress&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160; And now the site looks good! &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_42.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="208" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_20.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h2&gt;Part IV:&amp;#160; Client Side Ajax &lt;/h2&gt;

&lt;p&gt;Next we want to allow users to edit those titles, but in a smooth way that doesn't require form postback to the server.&amp;#160;&amp;#160; &lt;/p&gt;

&lt;p&gt;We start by changing the rendering of the title to an input control&amp;#160; &lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;input&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;titleTextBox&amp;quot;&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;       &lt;span style="color: #ff0000"&gt;onchange&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;onTitleChange(this.value, &amp;lt;%#Eval(&amp;quot;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;quot;) %&amp;gt;);&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;       &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;&amp;lt;%#Eval(&amp;quot;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;Title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;quot;) %&amp;gt;&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;pre&gt;Now we need to go define the onTitleChange client side javascript method.&amp;#160; &lt;/pre&gt;

&lt;p&gt;We do this in the header content area our MasterPage has left us.&amp;#160;&amp;#160; &lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:Content&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Content1&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ContentPlaceHolderID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;head&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; onTitleChange(title, id) {&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;     &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:Content&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Notice that VS 2008 has some great intellisense for JavaScript.&amp;#160;&amp;#160; We are actually running a JavaScript interpreter in the background, so we always know what type the objects are.&amp;#160; &lt;/p&gt;

&lt;p&gt;For example, here VS knows n is a Dom element.&amp;#160; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/clip_image002%5B15%5D.gif"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="clip_image002[15]" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/clip_image002%5B15%5D_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;But we can easily change the type to a string...&amp;#160; and VS keeps up! &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/clip_image004%5B6%5D.gif"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="167" alt="clip_image004[6]" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/clip_image004%5B6%5D_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;We know debugging in JavaScript can be hard... I know I have used alert() based debugging too many times!&amp;#160; Well, VS2008 is here to help with full debugging support for client side javascript.&amp;#160; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/clip_image006%5B4%5D.gif"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="169" alt="clip_image006[4]" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/clip_image006%5B4%5D_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Lots of cool stuff to show you here.&amp;#160; Notice at the top right, full debugging controls, run, break, step over, step into, etc. 
  &lt;br /&gt;At the mid-left, notice the icon's for break point, and current executing line. 

  &lt;br /&gt;At the mid-right, notice the debugging views I get that show me exactly what the current value of all the locals and parameters are. 

  &lt;br /&gt;At the bottom right, notice my the results of my call to Sys.Debug.Trace() are beging displayed in the output window.&amp;#160; &lt;br /&gt;And finally at the bottom right, notice I have full control to use the immediate window to evaluate results in the current context.&amp;#160; &lt;/p&gt;

&lt;p&gt;Ok, cool, but now we want to actually go change the datamodel on the server... How do I do that?&amp;#160; &lt;/p&gt;

&lt;p&gt;Well, first define a WCF-Ajax service.&amp;#160; This well expose JSON calls that is very ajax friendly.&amp;#160;&amp;#160; Add, New Item, Ajax-enabled WCF service. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/clip_image008_2.gif"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="162" alt="clip_image008" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/clip_image008_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now, we need to implement a web services that will update our data model.&amp;#160; &lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; onTitleChange(title, id) {
    Sys.Debug.trace(title + id);
    PhotoService.SetPhotoTitle(title, id, onComplete);

}
&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; onComplete(results) {
    Sys.Debug.trace(results);
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Then we just need to call it from client side javascript.&amp;#160; To do that, we need to add a reference in ScriptManager.&amp;#160; &lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:ScriptManager&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;sm&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Services&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:ServiceReference&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Path&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;~/PhotoService.svc&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Services&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:ScriptManager&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;pre&gt;&amp;#160;&lt;/pre&gt;

&lt;p&gt;Then, we can directly access the SetPhotoTitle method from JavaScript.&amp;#160; Notice we even get auto-completion. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/clip_image010_2.gif"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="113" alt="clip_image010" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/clip_image010_thumb.gif" width="382" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Because the is Ajax, we need to be asynchronous... which means we need to define a callback method to get the results.&amp;#160; &lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; onTitleChange(title, id) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    Sys.Debug.trace(title + id);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    PhotoService.SetPhotoTitle(title, id, onComplete);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;}&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; onComplete(results) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    Sys.Debug.trace(results);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;OK... let's run this in FireFox and use FireBug to check out the network traffic.&amp;#160; &lt;/p&gt;

&lt;p&gt;First thing to notice is that the Sys.Debug.Trace() calls are making their way to firefox's console window.&amp;#160; Very helpful in debugging.&amp;#160; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_44.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="198" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_21.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Next, we will expand that node and notice the request is in JSON format &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_46.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="178" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_22.png" width="423" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;As is the response.. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_48.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_23.png" width="406" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;Part V: The Ajax Control Toolkit&lt;/h2&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Now the fact that you can build this is great ajax components is great, but is it even better that we have a large number of pre-built component, ready for you to use.&amp;#160; Check out this toolbox, all&amp;#160; free and part of VS!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_50.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="571" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_24.png" width="180" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check out the live demo of all these controls -- Oh, and check them out from Firefox or Safari.. they work the same everywhere!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.asp.net/AJAX/AjaxControlToolkit/samples/"&gt;http://www.asp.net/AJAX/AjaxControlToolkit/samples/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_52.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="273" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_25.png" width="328" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h2&gt;Part VI: ASP.NET Ajax Templates and JQuery &lt;/h2&gt;

&lt;p&gt;Everything I showed thus far as been shipped and very stable and ready to use... I thought I'd show you some up and coming work.&amp;#160; &lt;/p&gt;

&lt;p&gt;Check out the &lt;a href="http://weblogs.asp.net/bleroy/archive/2008/07/30/using-client-templates-part-1.aspx"&gt;ASP.NET AJAX Templates work&lt;/a&gt; and the announcement about shipping the very popular &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/09/28/jquery-and-microsoft.aspx"&gt;Ajax library JQuery with Visual Studio.&lt;/a&gt;&amp;#160; &lt;/p&gt;

&lt;p&gt;First thing let's do is is establish some initial data... In many real world apps, you might use data from a web service call, etc.&amp;#160; &lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; employees = [
    { FirstName: &lt;span style="color: #006080"&gt;'Omar'&lt;/span&gt;, LastName: &lt;span style="color: #006080"&gt;'Khan'&lt;/span&gt;, Email: &lt;span style="color: #006080"&gt;'omark@microsoft.com'&lt;/span&gt;, Photo: &lt;span style="color: #006080"&gt;'omar.jpg'&lt;/span&gt;, Title: &lt;span style="color: #006080"&gt;'Product Unit Manager'&lt;/span&gt; },
    { FirstName: &lt;span style="color: #006080"&gt;'Jeff'&lt;/span&gt;, LastName: &lt;span style="color: #006080"&gt;'King'&lt;/span&gt;, Email: &lt;span style="color: #006080"&gt;'jking@microsoft.com'&lt;/span&gt;, Photo: &lt;span style="color: #006080"&gt;'jeff.jpg'&lt;/span&gt;, Title: &lt;span style="color: #006080"&gt;'Program Manager'&lt;/span&gt; },
    { FirstName: &lt;span style="color: #006080"&gt;'Pete'&lt;/span&gt;, LastName: &lt;span style="color: #006080"&gt;'LePage'&lt;/span&gt;, Email: &lt;span style="color: #006080"&gt;'plepage@microsoft.com'&lt;/span&gt;, Photo: &lt;span style="color: #006080"&gt;'pete.jpg'&lt;/span&gt;, Title: &lt;span style="color: #006080"&gt;'Product Manager'&lt;/span&gt; },
    { FirstName: &lt;span style="color: #006080"&gt;'Bertrand'&lt;/span&gt;, LastName: &lt;span style="color: #006080"&gt;'Le Roy'&lt;/span&gt;, Email: &lt;span style="color: #006080"&gt;'bleroy@microsoft.com'&lt;/span&gt;, Photo: &lt;span style="color: #006080"&gt;'bertrand.jpg'&lt;/span&gt;, Title: &lt;span style="color: #006080"&gt;'Program Manager'&lt;/span&gt; },
    { FirstName: &lt;span style="color: #006080"&gt;'Scott'&lt;/span&gt;, LastName: &lt;span style="color: #006080"&gt;'Guthrie'&lt;/span&gt;, Email: &lt;span style="color: #006080"&gt;'scottgu@microsoft.com'&lt;/span&gt;, Photo: &lt;span style="color: #006080"&gt;'scott.jpg'&lt;/span&gt;, Title: &lt;span style="color: #006080"&gt;'Corporate VP'&lt;/span&gt; },
    { FirstName: &lt;span style="color: #006080"&gt;'Steve'&lt;/span&gt;, LastName: &lt;span style="color: #006080"&gt;'Ballmer'&lt;/span&gt;, Email: &lt;span style="color: #006080"&gt;'steveb@microsoft.com'&lt;/span&gt;, Photo: &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;, Title: &lt;span style="color: #006080"&gt;'CEO'&lt;/span&gt; }
];&lt;/pre&gt;
&lt;/div&gt;

&lt;div&gt;Add the first column, very simply just display the data... This template will repeat for each item in the list.&amp;#160; &lt;/div&gt;

&lt;div&gt;&amp;#160;&lt;/div&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;column1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ul&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;simpletemplate&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;sys-template&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;b&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;{binding FirstName}&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;b&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
            (&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;{binding Title}&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;)&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ul&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Now we just wire it up&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;Sys.Application.add_init(
    &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;() {
        &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; simple = $create(Sys.UI.DataView, {}, {}, {}, $get(&lt;span style="color: #006080"&gt;'simpletemplate'&lt;/span&gt;));
        simple.set_data(employees);

    }
);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_54.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="207" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_26.png" width="240" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now, that is pretty simple, let's try something a bit more fancy.&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;fancytemplate&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;sys-template&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;card&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;img&lt;/span&gt; &lt;span style="color: #ff0000"&gt;sys:src&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;{{ 'jpg/' + Photo }}&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;icon&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;b&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;{binding FirstName}&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;b&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;b&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;{binding LastName}&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;b&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;{binding Title}&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;{{ 'mailto:' + Email }}&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;{{ Email }}&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_56.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="332" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_27.png" width="227" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;

&lt;p&gt;Now, this is good, but I am missing a photo of Steve...&amp;#160; Rather than showing a broken image, it would be nice to use a stock image of any pictures that are missing...&amp;#160; Let's change up the template a bit. (Notice we are moving away from source code in comments format...&amp;#160; stay tuned&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;&amp;lt;!--* if (Photo) { *--&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;img&lt;/span&gt; &lt;span style="color: #ff0000"&gt;sys:src&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;{{ 'jpg/' + Photo }}&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;icon&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;&amp;lt;!--* } else { *--&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;img&lt;/span&gt; &lt;span style="color: #ff0000"&gt;sys:src&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;jpg/anon.jpg&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;icon&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;&amp;lt;!--* }*--&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;and the results..&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_58.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="334" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_28.png" width="220" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now, for real fun, let's make the data editable...&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;table&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;edittemplatecontainer&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;thead&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;First Name&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Last Name&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Title&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;thead&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tbody&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;edittemplate&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;sys-template&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;input&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;{binding FirstName}&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;short&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;input&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;{binding LastName}&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;short&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;input&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;{binding Title}&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;medium&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;tbody&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;table&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;and, of course, we wire this one up too.&lt;/p&gt;

&lt;div&gt;&amp;#160;&lt;/div&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; edit = $create(Sys.UI.DataView, {}, {}, {}, $get(&lt;span style="color: #006080"&gt;'edittemplate'&lt;/span&gt;));
edit.set_data(employees);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Now, check it out, because of the magic of databding, as I change the values in one view, they show up in all the other views..&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_60.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="197" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_29.png" width="375" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;In fact, to make the change more obvious, let's do a little color effect on change.&amp;#160; And of course we will use JQuery for this.&amp;#160; &lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;js/jquery-1.2.6.debug.js&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Then let's define a method to do the color change..&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; flashTarget(value, binding) {
    &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; target = binding.get_target();

    $(target).parent()
        .css(&lt;span style="color: #006080"&gt;'backgroundColor'&lt;/span&gt;, &lt;span style="color: #006080"&gt;'orange'&lt;/span&gt;)
        .animate({ backgroundColor: &lt;span style="color: #006080"&gt;'red'&lt;/span&gt; }, 500)
        .animate({ backgroundColor: &lt;span style="color: #006080"&gt;'yellow'&lt;/span&gt; }, 1000)
        .animate({ backgroundColor: &lt;span style="color: #006080"&gt;'white'&lt;/span&gt; }, 500);
    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; value;
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Notice I get JavaScript intelliense even on &lt;a href="http://jquery.com/"&gt;JQuery&lt;/a&gt;, even in the &amp;quot;chaining&amp;quot;..&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_62.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="150" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_30.png" width="356" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now we just write up this method to each of the bindings... for example:&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;b&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;{binding FirstName, convert=flashTarget}&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;b&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
(&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;{binding Title, convert=flashTarget}&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;)&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_66.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="156" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxWorldTalkBuildingaGreatAjaxapplicati_CB79/image_thumb_32.png" width="467" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Wow -- What a talk!&amp;#160; You can find &lt;a href="http://brad_abrams.members.winisp.net/Projects/AjaxWorld08/AjaxAppDemoFiles.zip"&gt;all the demo code here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let me know what you think!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9006810" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/brada/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/brada/archive/tags/AjaxWorld/default.aspx">AjaxWorld</category></item><item><title>On My Way to AjaxWorld!</title><link>http://blogs.msdn.com/brada/archive/2008/10/16/on-my-way-to-ajaxworld.aspx</link><pubDate>Fri, 17 Oct 2008 07:26:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9002666</guid><dc:creator>BradA</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/brada/comments/9002666.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=9002666</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/OnMyWaytoAjaxWorld_12D80/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="63" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/OnMyWaytoAjaxWorld_12D80/image_thumb.png" width="494" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I have very excited to be going to &lt;a href="http://ajaxworld.com/"&gt;AjaxWorld&lt;/a&gt; in San Jose, CA next week.&amp;#160; I love getting a chance to get out of Redmond and talk to real-life developers and an industry wide event such as AjaxWorld gives me such a great opportunity to see what is going on in and outside of the Microsoft space.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/scottgu/"&gt;Scott Guthrie&lt;/a&gt; will be &lt;a href="http://ajaxworld.com/general/keynotes1008.htm"&gt;giving the keynote&lt;/a&gt; on bright and early Monday morning.&amp;#160; If you have never had a chance to see Scott speak, you have to wake up early to catch this!&amp;#160;&amp;#160; Scott is a master of the demo and I know he has some great ones in cooking up for this already.&lt;/p&gt;  &lt;p&gt;I am very lucky to be following Scott with a couple of breakout sessions... I would love for these to be very interactive, some come, bring your questions and comments!&lt;/p&gt;  &lt;p&gt;If you are going please come and catch me at the conference and chat... I'd love to hear you thoughts and feedback!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Building Great AJAX Applications from Scratch Using ASP.NET 3.5 and Visual Studio 2008&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Monday, 5:20-6:05p&lt;/em&gt;     &lt;br /&gt;Come see a no-slides, code-only presentation that starts with a blank directory and builds a data-driven, AJAX enabled, ASP.NET web application from scratch that implements common AJAX patterns with the rich set of AJAX Control Toolkit, accesses data with LINQ, and implements standards-based styling and layout using CSS and clean HTML. Learn the new features of ASP.NET 3.5 and Microsoft Visual Studio 2008 and how they integrate together to provide the world's most productive web development experience. This session uses the 100% free .NET Framework and Visual Studio tools, and the resulting application will work with all browsers, Safari, Firefox and, of course, IE.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Building Rich Internet Applications Using Microsoft Silverlight 2&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Tuesday, 4:30-5:15p&lt;/em&gt;     &lt;br /&gt;Many of today's (and tomorrow&amp;#8217;s) development projects lend themselves nicely to RIA application patterns. Silverlight offers a compelling RIA development experience that works on Linux, the Mac and windows as well as all major browsers. With HD video, vector based graphics and a rich set of controls including DataGrid, Silverlight offers a compelling development experience in nearly any programming language you&amp;#8217;d like from C# and VB, to JavaScript and Python. Learn how to use Visual Studio to create applications, how to create UI using XAML markup and code, how to retrieve data from the web, and how to manipulate data with XML and LINQ. This talk uses the 100% free Silverlight runtime and Visual Studio tools&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Also, notice that &lt;a href="http://www.edream.org/default.aspx"&gt;Sue Googe&lt;/a&gt; is doing a presentation on Silverlight as well:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Spice Up User Experience with Silverlight&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Monday 11-11:45a&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Microsoft introduced Silverlight as cross-platform, cross-browser, next generation RIA solution. This session will use real world implementations to show you how to build a Silverlight application from start to finish, as well overall strategy why we should or shouldn't use Silverlight. No matter whether you have LAMP, ASP.NET or Java web application, you can take advantage of Silverlight to impress your user with the &amp;quot;Wow&amp;quot; effects&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/synergist/"&gt;Michael Scherotter&lt;/a&gt; from Microsoft will be joining this panel...&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Power Panel: The Future of Rich Media and Content Across All Four Screens &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Monday 7:15-8:00p&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;The &amp;quot;Silver Screen,&amp;quot; television, PC and now mobile handsets - media convergence is increasingly about converging these four and optimizing their mix. How does the Web, specifically the Rich Web, play into this process and what are the business implications? If the Fourth Screen is mobile, what are the usability, security, and bandwidth issues that developers and business alike need to be aware of? What role will advertising play in speeding up (or slowing down) adoption? &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9002666" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/AjaxWorld/default.aspx">AjaxWorld</category></item><item><title>Microsoft @ AJAXWorld</title><link>http://blogs.msdn.com/brada/archive/2007/09/19/microsoft-ajaxworld.aspx</link><pubDate>Thu, 20 Sep 2007 09:45:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5007622</guid><dc:creator>BradA</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/brada/comments/5007622.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=5007622</wfw:commentRss><description>&lt;p&gt;While I am bummed that I am not able to go to &lt;a href="http://www.ajaxworld.com/"&gt;AJAXWorld&lt;/a&gt; this time, I am super excited about some of the great stuff I see going on there.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/MicrosoftAJAXWorld_8F96/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="60" alt="image" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/MicrosoftAJAXWorld_8F96/image_thumb.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://joeon.net/"&gt;Joe Stagner&lt;/a&gt; is going to give a killer keynote on "AJAX in the balance".&amp;nbsp; Joe totally gets open source, standards and sometimes, the need for full bet-your-business 24x7 support.&amp;nbsp; I can't wait to see what he does with this thing. &lt;p&gt;In addition, there looks like a bunch of cool sessions: &lt;p&gt;&lt;a href="http://www.ajaxworld.com/general/sessiondetail0907.htm?id=181"&gt;Jesse Liberty &lt;/a&gt; - on building Silverlight applications sessions &lt;p&gt;&lt;a href="http://www.ajaxworld.com/general/sessiondetail0907.htm?id=85"&gt;Joe Stagner &lt;/a&gt; on the ASP.NET AJAX platform &lt;p&gt;&lt;a href="http://www.ajaxworld.com/general/sessiondetail0907.htm?id=64"&gt;Patrick Ruzand &lt;/a&gt; on ASP.NET AJAX Controls... &lt;p&gt;&lt;a href="http://www.ajaxworld.com/general/sessiondetail0907.htm?id=120"&gt;Robert Boedigheimer &lt;/a&gt; on the ASP.NET AJAX Control toolkit &lt;p&gt;&lt;a href="http://www.ajaxworld.com/general/sessiondetail0907.htm?id=78"&gt;Dave Wright &lt;/a&gt; - on building Cloud Data Services with "Astoria" &lt;p&gt;&lt;a href="http://www.ajaxworld.com/general/sessiondetail0907.htm?id=69"&gt;Dave Wolf &lt;/a&gt;(from Cynergy) - will talk about rich user experience on the web, it will be interesting to hear his thoughts on Silverlight there... &lt;p&gt;&amp;nbsp; &lt;p&gt;If you are going, please blog and let me know what you think of these sessions, and what else is cool...&amp;nbsp; &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5007622" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/brada/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/brada/archive/tags/AjaxWorld/default.aspx">AjaxWorld</category><category domain="http://blogs.msdn.com/brada/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Ajax in the Balance Slides</title><link>http://blogs.msdn.com/brada/archive/2007/03/27/ajax-in-the-balance-slides.aspx</link><pubDate>Tue, 27 Mar 2007 21:06:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1966368</guid><dc:creator>BradA</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/brada/comments/1966368.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=1966368</wfw:commentRss><description>&lt;p&gt;I have gotten a couple of asks for the actual slides from &lt;a href="http://blogs.msdn.com/brada/archive/2007/03/21/ajaxworld-keynote-ajax-in-the-balance.aspx"&gt;my AjaxWorld keynote&lt;/a&gt; last week.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/projects/AjaxWorld307/AjaxInTheBalance.ppt" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="175" src="http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/AjaxintheBalanceSlides_96C1/image%5B2%5D.png" width="237" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://brad_abrams.members.winisp.net/projects/AjaxWorld307/AjaxInTheBalance.ppt"&gt;Ajax in the Balance&lt;/a&gt;&lt;/p&gt; &lt;p&gt;I'd love to have your feedback\comments... And remember that plagiarism is the highest form of flattery ;-)&amp;nbsp; &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1966368" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/brada/archive/tags/Microsoft+AJAX+Library/default.aspx">Microsoft AJAX Library</category><category domain="http://blogs.msdn.com/brada/archive/tags/AjaxWorld/default.aspx">AjaxWorld</category></item><item><title>Good Response from AjaxWorld keynote</title><link>http://blogs.msdn.com/brada/archive/2007/03/21/good-response-from-ajaxworld-keynote.aspx</link><pubDate>Thu, 22 Mar 2007 07:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1928789</guid><dc:creator>BradA</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/brada/comments/1928789.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=1928789</wfw:commentRss><description>&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;We got some good feedback from &lt;A href="http://blogs.msdn.com/brada/archive/2007/03/21/ajaxworld-keynote-ajax-in-the-balance.aspx" mce_href="http://blogs.msdn.com/brada/archive/2007/03/21/ajaxworld-keynote-ajax-in-the-balance.aspx"&gt;my AjaxWorld keynote&lt;/A&gt;...&amp;nbsp;&amp;nbsp; If you were there, I'd love to hear your feedback, thoughts... please comment here or &lt;A href="http://blogs.msdn.com/brada/contact.aspx" mce_href="http://blogs.msdn.com/brada/contact.aspx"&gt;drop me a line&lt;/A&gt;... &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;A href="http://www.internetnews.com/dev-news/article.php/3667066" mce_href="http://www.internetnews.com/dev-news/article.php/3667066"&gt;Microsoft Not a Cathedral; Open Source Not a Bazaar&lt;/A&gt;&lt;/B&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;NEW YORK -- It's not every day that you see a Microsoft employee demonstrating Microsoft software running natively on Linux. Yet that's exactly what happened at AJAXWorld here, as Brad Abrams, group program manager at Microsoft for &lt;/EM&gt;&lt;A href="http://www.internetnews.com/dev-news/article.php/3643081" mce_href="http://www.internetnews.com/dev-news/article.php/3643081"&gt;&lt;EM&gt;ASP.NET AJAX&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt; (codenamed Atlas) did today.&lt;BR&gt;&lt;/EM&gt;(Note, as &lt;A href="http://nanotech.lemonup.com/Patrick-Finch-The-map-and-the-signpost/" mce_href="http://nanotech.lemonup.com/Patrick-Finch-The-map-and-the-signpost/"&gt;Patrick&lt;/A&gt; says, I do over generalize the Cathedral and Bazaar concept slightly to make a point... Thanks Patrick...)&lt;BR&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;B&gt;&lt;/B&gt;
&lt;P&gt;&lt;A href="http://dotnet.sys-con.com/read/351737.htm" mce_href="http://dotnet.sys-con.com/read/351737.htm"&gt;&lt;STRONG&gt;"What Does AJAX Bring to the Client-Server Balance?" Asks AJAXWorld Keynoter, Microsoft's Brad Abrams&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;Abrams came out of the gate fast, demoing how ASP.NET AJAX allows a developer to AJAX-enable a Website without writing JavaScript, by using the tag-based approach that ASP.NET AJAX makes very easy to execute, including JSON calls back to the server.&lt;BR&gt;Abrams brought along his Mac, to demonstrate that it all ran on a Mac just as easily - a nice touch for a Microsoft speaker.&lt;BR&gt;He then demoed how ASP.NET AJAX also jives with Dojo&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://www.adtmag.com/article.aspx?id=20402" mce_href="http://www.adtmag.com/article.aspx?id=20402"&gt;&lt;STRONG&gt;Microsoft Joins OpenAJAX Alliance&lt;/STRONG&gt;&lt;/A&gt; 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;The Redmond, Wash.-based software giant announced its entree into the alliance at the AJAXWorld East conference in New York. &lt;/EM&gt;
&lt;P&gt;&lt;EM&gt;"We are looking forward to carrying forward what you can do with AJAX and are really open in an integrated way," said Brad Abrams, &lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://www.alexbarnett.net/blog/archive/2007/03/21/Microsoft-and-Google-join-OpenAjaxAlliance.aspx" mce_href="http://www.alexbarnett.net/blog/archive/2007/03/21/Microsoft-and-Google-join-OpenAjaxAlliance.aspx"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Oh, and &lt;A href="http://blogs.msdn.com/joestagner/" mce_href="http://blogs.msdn.com/joestagner/"&gt;Joe Stagner&lt;/A&gt; got some well deserved credit for his excellent presentation at AjaxWorld last night...&amp;nbsp; If you ever get a chance to hear this guy speak you should... He is excellent... &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://ajax.sys-con.com/read/352235.htm" mce_href="http://ajax.sys-con.com/read/352235.htm"&gt;AJAXWorld 2007 East: Doing AJAX with the Microsoft AJAX Development Platform&lt;/A&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;"MS AJAX combines rich, cross browser client side libraries with ASP.NET's popular server side development NT technology to offer an ideal developers toolbox for developing the next generation of Web Applications," said Stagner&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Update (3-24):&amp;nbsp; I just saw one more notewothy post drop in:&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://www.atalasoft.com/cs/blogs/davidcilley/archive/2007/03/22/ajaxworld-nyc-2007.aspx" mce_href="http://www.atalasoft.com/cs/blogs/davidcilley/archive/2007/03/22/ajaxworld-nyc-2007.aspx"&gt;&amp;nbsp;Atalasoft at AjaxWorld NYC 2007 &lt;/A&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;AJAX in the Balance&lt;/STRONG&gt; by &lt;/EM&gt;&lt;A class="" href="http://blogs.msdn.com/brada/" target=_blank&gt;&lt;EM&gt;Brad Abrams &lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;(Microsoft):&lt;B&gt; &lt;/B&gt;This was one of the main&amp;nbsp;keynotes I was interested in.&amp;nbsp; Brad showed us a demo web site that he created to sell dice.&amp;nbsp; He used ASP.NET AJAX to stop the full page refresh, and add autocomplete to the search box.&amp;nbsp; He also showed us how that demo worked with PHP and Linux, on a Mac.&amp;nbsp; He gave us a preview of JavaScript intellisense in Orcas (which looks really sweet btw).&amp;nbsp; The 'wow' part of the keynote was when he showed off a WPFE demo that had turning pages, music, and video.&amp;nbsp; Very impressive.&lt;/EM&gt; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1928789" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/brada/archive/tags/Software+Development/default.aspx">Software Development</category><category domain="http://blogs.msdn.com/brada/archive/tags/Microsoft+AJAX+Library/default.aspx">Microsoft AJAX Library</category><category domain="http://blogs.msdn.com/brada/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/brada/archive/tags/AjaxWorld/default.aspx">AjaxWorld</category></item><item><title>Microsoft joins the OpenAjax Alliance</title><link>http://blogs.msdn.com/brada/archive/2007/03/20/microsoft-joins-the-openajax-alliance.aspx</link><pubDate>Tue, 20 Mar 2007 21:41:41 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1920864</guid><dc:creator>BradA</dc:creator><slash:comments>13</slash:comments><comments>http://blogs.msdn.com/brada/comments/1920864.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=1920864</wfw:commentRss><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;I am super excited about the fact that &lt;a href="http://www.marketwire.com/mw/release_html_b1?release_id=228535"&gt;Microsoft is joining&lt;/a&gt; the &lt;a href="http://www.openajax.org/"&gt;Open Ajax Alliance&lt;/a&gt;. The &lt;a href="http://ajax.asp.net/"&gt;ASP.NET AJAX&lt;/a&gt; team has long had the goal to help evolve AJAX-style development and ensure a high degree of interopablity between Ajax Frameworks and tools. But most importantly I am excited to be able to empowering web developers with technologies that work cross-browser and cross-platform.&lt;br&gt;Check out &lt;a href="http://weblogs.asp.net/bleroy/"&gt;Bertrand Le Roy’s blog&lt;/a&gt; to stay up to date on our part in this effort…  &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;a href="http://blogs.msdn.com/photos/brada/images/1916813/original.aspx"&gt;&lt;img src="http://blogs.msdn.com/photos/brada/images/1916813/original.aspx"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1920864" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/brada/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/brada/archive/tags/AjaxWorld/default.aspx">AjaxWorld</category></item><item><title>Great fun at AjaxWorld</title><link>http://blogs.msdn.com/brada/archive/2007/03/19/great-fun-at-ajaxworld.aspx</link><pubDate>Tue, 20 Mar 2007 02:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1915558</guid><dc:creator>BradA</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/brada/comments/1915558.aspx</comments><wfw:commentRss>http://blogs.msdn.com/brada/commentrss.aspx?PostID=1915558</wfw:commentRss><description>&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Well, I made it in to &lt;A href="http://maps.live.com/default.aspx?v=2&amp;amp;cp=40.714987~-74.00708&amp;amp;style=r&amp;amp;lvl=10&amp;amp;tilt=-90&amp;amp;dir=0&amp;amp;alt=-1000" mce_href="http://maps.live.com/default.aspx?v=2&amp;amp;cp=40.714987~-74.00708&amp;amp;style=r&amp;amp;lvl=10&amp;amp;tilt=-90&amp;amp;dir=0&amp;amp;alt=-1000"&gt;NYC&lt;/A&gt; early this morning for &lt;A href="http://www.ajaxworldexpo.com/" mce_href="http://www.ajaxworldexpo.com/"&gt;AjaxWorld&lt;/A&gt;… So far the conference has been very good... I am spending a bit of time honing the demos for my keynote Wednesday morning. If you are at the show, I hope you can come, I will be showing the &lt;A href="http://ajax.asp.net/" mce_href="http://ajax.asp.net/"&gt;ASP.NET AJAX&lt;/A&gt;, the &lt;A href="http://ajax.asp.net/downloads/library/default.aspx?tabid=47" mce_href="http://ajax.asp.net/downloads/library/default.aspx?tabid=47"&gt;Microsoft AJAX library&lt;/A&gt; and &lt;A href="http://msdn2.microsoft.com/en-us/asp.net/bb187358.aspx" mce_href="http://msdn2.microsoft.com/en-us/asp.net/bb187358.aspx"&gt;WPFE&lt;/A&gt; and I will be using &lt;A href="http://www.microsoft.com/windows/products/windowsvista/default.mspx" mce_href="http://www.microsoft.com/windows/products/windowsvista/default.mspx"&gt;Vista&lt;/A&gt;, &lt;A href="http://developer.apple.com/macosx/" mce_href="http://developer.apple.com/macosx/"&gt;OSX&lt;/A&gt; and &lt;A href="http://www.ubuntu.com/" mce_href="http://www.ubuntu.com/"&gt;Linux Ubuntu&lt;/A&gt; in the demos! 
&lt;P&gt;In the opening keynote, &lt;A href="http://www.crockford.com/" mce_href="http://www.crockford.com/"&gt;Douglas Crockford&lt;/A&gt; asked a little about who was here.. 
&lt;P&gt;Looks like this is the first “Ajax” experience for about one quarter of the folks here… That shows me that there continues to be lots of momentum. 
&lt;P&gt;Interestingly enough, well over half of the folks are working on enterprise applications. That shows me that while we talk a lot about the cool, sexy consumer facing Ajax apps, there is real meat in Ajax in the enterprise developer space. In that area things such as developer productivity, consistency with current investments, incremental adoption models are very important. 
&lt;P&gt;Douglas also mentioned something I have long thought is true.. the web is not an application platform.. it is much more of a document platform. Nikhil did &lt;A href="http://www.nikhilk.net/Entry.aspx?id=120" mce_href="http://www.nikhilk.net/Entry.aspx?id=120"&gt;a post about this&lt;/A&gt; a while back and I totally agree with much of what he says… 
&lt;P&gt;&lt;B&gt;&lt;/B&gt;
&lt;P&gt;BTW, the ASP.NET AJAX talks at the show include: 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;3/20 -- 6:35 - 7:20p Microsoft AJAX Library Architecture – A Deep Dive &lt;A href="http://nimad.wordpress.com/" mce_href="http://nimad.wordpress.com/"&gt;Nima Dilmaghani&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;3/21 -- 07:30 - 08:15a Keynote by the GPM of ASP.NET AJAX – 'AJAX in the Balance' &lt;A href="http://blogs.msdn.com/bada" mce_href="http://blogs.msdn.com/bada"&gt;Brad Abrams&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;3/21 -- 6:05 - 7:00p Doing AJAX with the Microsoft AJAX Development Platform &lt;A href="http://blogs.msdn.com/joestagner/" mce_href="http://blogs.msdn.com/joestagner/"&gt;Joe Stagner&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;B&gt;&lt;/B&gt;
&lt;P&gt;If you are at the show, please come by the booth, the keynote, one of these talks or drop me a line.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1915558" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/brada/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/brada/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/brada/archive/tags/AjaxWorld/default.aspx">AjaxWorld</category></item></channel></rss>