<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/" version="2.0">
    <channel>
        <title>Matthew M. Osborn</title>
        <link>http://blog.osbornm.com/Default.aspx</link>
        <description>Digital Daydream</description>
        <language>en-US</language>
        <copyright>Matthew M. Osborn</copyright>
        <generator>Subtext Version 2.1.0.5</generator>
        <image>
            <title>Matthew M. Osborn</title>
            <url>http://blog.osbornm.com/images/RSS2Image.gif</url>
            <link>http://blog.osbornm.com/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/MatthewMOsborn" type="application/rss+xml" /><item>
            <title>1 year, 12 months, 52 weeks, 365 days</title>
            <link>http://blog.osbornm.com/archive/2009/06/07/70.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://blog.osbornm.com/images/1yeardown24moretogo_1E1F/myOffice_2_3.jpg" rel="lightbox"&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="myOffice_2" border="0" alt="myOffice_2" align="left" src="http://blog.osbornm.com/images/1yeardown24moretogo_1E1F/myOffice_2_thumb_3.jpg" width="244" height="164" /&gt;&lt;/a&gt; Somewhere around a year and half ago I decided that I need a change of pace in my life. I applied to Microsoft thinking that there was no harm in trying and got an interview. A little over a year ago I packed up two suite cases with some clothes, packed up my house, and got on a &lt;a href="http://blog.osbornm.com/archive/2008/05/05/the-big-blue-monster--my-move-to-redmond-wa.aspx"&gt;plane to Seattle&lt;/a&gt;. It honestly doesn’t seem &lt;a href="http://blog.osbornm.com/archive/2008/07/20/one-month--microsoft.aspx"&gt;that long ago&lt;/a&gt; that it all happened, but the following Monday morning there I was in NEO (new employee orientation).&lt;/p&gt;  &lt;p&gt;Through my year at Microsoft I have grown leaps and bounds both technically and personally. Let’s take a look back on what I have been able to do with this year.  Well the biggest thing was simply learning how to do my job. Prior to joining I had little to no experience with QA. I don’t claim to be an expert but I feel I know what I am doing now. I started off working on ASP.NET 4 and have had the opportunity to work on the web forms feature crew (anything and everything to do with web forms).  This includes the new ClientID abilities, Routing, and some SEO features.  Along with working on our product I have also been busy helping to improve &lt;a href="http://blog.osbornm.com/archive/2009/02/11/59.aspx"&gt;The Lightweight Test Automation Framework&lt;/a&gt; that our team uses for some of it’s testing.  This also includes making a public release on the &lt;a href="http://aspnet.codeplex.com/Wiki/View.aspx?title=ASP.NET%20QA"&gt;asp.net codeplex.com site&lt;/a&gt;.  Another exciting venture that I have started in my year is starting up an ASP.NET QA related podcast, &lt;a href="http://blog.osbornm.com/archive/2009/05/06/69.aspx"&gt;Coding QA&lt;/a&gt;. Coding QA is a podcast that I produce with Federico where we ramble on about everything QA related.&lt;/p&gt;  &lt;p&gt;Now on to the good stuff, the lessons learned, and let me say some of these lesson were hard learned! First, I have learned that to deliver a successful product members of a team must be aware of that team.  By this I mean that everyone should be focused on their work but they should also look out for other team members.  This could be as simple as walking over and asking someone if they could use any help when they are stressed. Basically, make sure you keep the machine well oiled. I think the biggest and best lesson that I have learned is one of our PUMs favorite things to say “Come to me with solutions not problems.” This is a simple saying but I think that it really sums up several key points. First, don’t waste time medaling on what is wrong but on what you can do to make it better.  Second, in life no one is going to help you, you need to be willing to help yourself. I know some of these are pretty deep and cheesy but like I said I have also grown personally.  &lt;/p&gt;  &lt;p&gt;Not all of my time has been spent hard at work, I have been able to have some fun along the way. I have been able to take advantage of the perks of working for a big company (company picnic and the company meeting where Rainn Wilson hosted). Also Microsoft, &lt;a href="http://blog.osbornm.com/archive/2008/10/16/techmiddoted-emea-2008.aspx"&gt;sent me to Tech·Ed EMEA&lt;/a&gt; which was in Barcelona, Spain! I have also been able to meet some many new and interesting people.&lt;/p&gt;  &lt;p&gt;When I left to come up to Seattle lots of people warning me about the “honeymoon phase.”  Meaning that while I would love the job at first, I would get bored and wore out with it shortly after.  I am very pleased to say “I TOLD YOU SO,” a year later and I still love waking up every morning and going to work. Here is too many more years to come! I’d also like to say thank you to everyone that has helped me along the way. A very special thanks go out to my family who have been extremely supportive of me even though I am thousands of miles away!&lt;/p&gt;&lt;img src="http://blog.osbornm.com/aggbug/70.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5i9oMQh-50e72D6BVo9G3hFSeXE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5i9oMQh-50e72D6BVo9G3hFSeXE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5i9oMQh-50e72D6BVo9G3hFSeXE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5i9oMQh-50e72D6BVo9G3hFSeXE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
            <dc:creator>Matthew M. Osborn</dc:creator>
            <guid>http://blog.osbornm.com/archive/2009/06/07/70.aspx</guid>
            <pubDate>Sun, 07 Jun 2009 10:02:15 GMT</pubDate>
            <wfw:comment>http://blog.osbornm.com/comments/70.aspx</wfw:comment>
            <comments>http://blog.osbornm.com/archive/2009/06/07/70.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://blog.osbornm.com/comments/commentRss/70.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Coding QA Podcast Launched!</title>
            <category>Podcast</category>
            <link>http://blog.osbornm.com/archive/2009/05/06/69.aspx</link>
            <description>&lt;p&gt;It is my pleasure to announce to you the official launch of the &lt;a href="http://www.codingqa.com/"&gt;Coding QA Podcast&lt;/a&gt;. Federico and I have been working on this for several months and have already released four shows with a fifth waiting to be edited.  &lt;a href="http://www.codingqa.com"&gt;Coding QA&lt;/a&gt; is a weekly show about testing from the trenches. Federico and I are members of the ASP.NET QA team, and in this podcast we share our views about everything that has to do with testing and our experience of being the front line testers of a web platform. This is just one of several ways the &lt;a href="http://weblogs.asp.net/asptest"&gt;QA team&lt;/a&gt; is engaging with our customers and we have received positive feedback.  So please, visit the site, &lt;a href="http://www.codingqa.com/"&gt;tune in&lt;/a&gt;, and let us know what you think. &lt;/p&gt;&lt;img src="http://blog.osbornm.com/aggbug/69.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jy_nSwVclz2Ds-5K5tgg9P7oJZs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jy_nSwVclz2Ds-5K5tgg9P7oJZs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jy_nSwVclz2Ds-5K5tgg9P7oJZs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jy_nSwVclz2Ds-5K5tgg9P7oJZs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
            <dc:creator>Matthew M. Osborn</dc:creator>
            <guid>http://blog.osbornm.com/archive/2009/05/06/69.aspx</guid>
            <pubDate>Wed, 06 May 2009 07:20:35 GMT</pubDate>
            <wfw:comment>http://blog.osbornm.com/comments/69.aspx</wfw:comment>
            <comments>http://blog.osbornm.com/archive/2009/05/06/69.aspx#feedback</comments>
            <wfw:commentRss>http://blog.osbornm.com/comments/commentRss/69.aspx</wfw:commentRss>
        </item>
        <item>
            <title>ASP.NET QA Podcast &amp;ndash; Episode 4</title>
            <link>http://blog.osbornm.com/archive/2009/04/13/68.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;&lt;strong&gt;Download :&lt;/strong&gt; &lt;/font&gt;&lt;font size="2"&gt;&lt;a href="http://cid-b387831f07f582b4.skydrive.live.com/self.aspx/ASP.NET%20QA%20Podcast/AspNetQAPodcast4.mp3"&gt;Episode 4&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;In the fourth installment of the ASP.NET QA Podcast Federico and Matthew discuss “&lt;strong&gt;The Good&lt;/strong&gt;,” “&lt;strong&gt;The Bad&lt;/strong&gt;,” and “&lt;strong&gt;The Ugly&lt;/strong&gt;” of the history of the ASP.NET QA Team. Discussion ranges from the dark ages, to the renaissance, to the industrial revolution, to the “21st and half century”.  Join them as they discuss the lessons learned and how the team has improved over time. &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;The team released the April update to the Lightweight Test Automation Framework. &lt;/li&gt;
    &lt;li&gt;“&lt;strong&gt;The Dark Ages&lt;/strong&gt;” ASP.NET 1.0/2.0
    &lt;ul&gt;
        &lt;li&gt;During this time the team was very focused on automating everything. &lt;/li&gt;
        &lt;li&gt;(&lt;em&gt;disadvantage&lt;/em&gt;) This approach is not good with a changing Spec. &lt;/li&gt;
        &lt;li&gt;(&lt;em&gt;disadvantage&lt;/em&gt;) Bugs were being found to late in the process. &lt;/li&gt;
        &lt;li&gt;(advantage) Excellent automation coverage. &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;“&lt;strong&gt;The Renaissance&lt;/strong&gt;” Atlas/Microsoft Ajax
    &lt;ul&gt;
        &lt;li&gt;The division moved to a feature crew model for development and QA. &lt;/li&gt;
        &lt;li&gt;(advantage) The team adopted a heavy unit testing practice. Increase in code coverage. &lt;/li&gt;
        &lt;li&gt;(&lt;em&gt;disadvantage&lt;/em&gt;) The QA team still worked has it had before. It would automate everything is less time. &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;“&lt;strong&gt;The Industrial Revolution&lt;/strong&gt;” ASP.NET 3.5
    &lt;ul&gt;
        &lt;li&gt;The QA team began to adopt the Feature crew model and started the process of agile testing with exploratory testing. &lt;/li&gt;
        &lt;li&gt;(&lt;em&gt;advantage&lt;/em&gt;) Bugs were being found at the beginning of the process. &lt;/li&gt;
        &lt;li&gt;(&lt;em&gt;disadvantage&lt;/em&gt;) The team still wrote a large amount of automation. &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;“&lt;strong&gt;21st and half century&lt;/strong&gt;” ASP.NET 3.5 SP1/ASP.NET 4.0/vNext
    &lt;ul&gt;
        &lt;li&gt;The team has really started moving away from automating everything and is spending more time investigating user scenarios. &lt;/li&gt;
        &lt;li&gt;The team has formed its own unique blend of agile, scrum, and any other buzz word project management theory. &lt;/li&gt;
        &lt;li&gt;(&lt;em&gt;advantage&lt;/em&gt;) Creating and automating sample applications provides feedback for real world customer scenarios. &lt;/li&gt;
        &lt;li&gt;(&lt;em&gt;disadvantage&lt;/em&gt;) The team is young and is still learning the best practices. &lt;/li&gt;
        &lt;li&gt;(&lt;em&gt;Struggle&lt;/em&gt;) Costing has become less of a clear cut process. &lt;/li&gt;
        &lt;li&gt;(&lt;em&gt;Struggle&lt;/em&gt;) The is still a barrier between the QA and Dev teams. &lt;/li&gt;
        &lt;li&gt;(&lt;em&gt;Struggle&lt;/em&gt;) No one wants the blame when a bug is found. &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Links from the show :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25887"&gt;Lightweight Test Automation Framework April Release&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a mce_href="mailto:farmas@microsoft.com" href="mailto:farmas@microsoft.com"&gt;Federico’s Email&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a mce_href="mailto:mosborn@microsoft.com" href="mailto:mosborn@microsoft.com"&gt;Matthew’ Email&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a mce_href="http://weblogs.asp.net/asptest" href="http://weblogs.asp.net/asptest"&gt;ASP.NET QA Team Blog&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://blog.osbornm.com/aggbug/68.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hLvXe_GEZXgytRuPqPuY_7rcZEs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hLvXe_GEZXgytRuPqPuY_7rcZEs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hLvXe_GEZXgytRuPqPuY_7rcZEs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hLvXe_GEZXgytRuPqPuY_7rcZEs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
            <dc:creator>Matthew M. Osborn</dc:creator>
            <guid>http://blog.osbornm.com/archive/2009/04/13/68.aspx</guid>
            <pubDate>Mon, 13 Apr 2009 21:56:29 GMT</pubDate>
            <wfw:comment>http://blog.osbornm.com/comments/68.aspx</wfw:comment>
            <comments>http://blog.osbornm.com/archive/2009/04/13/68.aspx#feedback</comments>
            <wfw:commentRss>http://blog.osbornm.com/comments/commentRss/68.aspx</wfw:commentRss>
            <enclosure url="http://media.libsyn.com/media/aspnetqa/CodingQAPodcast4.mp3" length="12869429" type="audio/mpeg" />
        </item>
        <item>
            <title>Lightweight Test Automation Framework April Release</title>
            <link>http://blog.osbornm.com/archive/2009/04/09/67.aspx</link>
            <description>&lt;p&gt;The April release of the Lightweight Test Automation Framework for ASP.NET has just been posted and you can download it &lt;a title="April Update" href="http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25887"&gt;here&lt;/a&gt;. For this release, the team has worked hard to include the following bug fixes and new features. Please continue to give us your feedback as many of the fixes and features are based what we have heard from the community.&lt;/p&gt;  &lt;h3&gt;Improvements to the user interface&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="left"&gt;A new look has been given to the test name when it passes or fails.  There is both color and visual queues that indicate weather a test has passed or failed.  Failed test names also appear slightly larger to help them stand out. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="left"&gt;There is now a “Run Failed Tests” button. This button will open a new browser window that will select and run only the failed tests, for easy verification of fixes. &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt; &lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="NewUI2" border="0" alt="NewUI2" align="left" src="http://blog.osbornm.com/images/886b4c04d3f6_86CC/NewUI2.png" width="504" height="363" /&gt;   &lt;br style="clear: both" /&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;The ability to automate popup windows&lt;/h3&gt;  &lt;p&gt;In previous versions of the framework there was no way to verify the contents of a popup window.  With this release we have far better support for opening and verifying the contents of popup windows.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: #2b91af"&gt;HtmlPage &lt;/span&gt;page = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;HtmlPage&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"MyPage.aspx"&lt;/span&gt;);
page.Elements.Find(&lt;span style="color: #a31515"&gt;"OpenPopup"&lt;/span&gt;).Click();
&lt;span style="color: green"&gt;// get popup window
&lt;/span&gt;&lt;span style="color: #2b91af"&gt;HtmlPage &lt;/span&gt;popup = page.GetPopupWindow(1);
&lt;span style="color: green"&gt;// verify title of popup
&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="color: #a31515"&gt;"This is the Popup Page"&lt;/span&gt;, popup.Elements.Find(&lt;span style="color: #a31515"&gt;"h1"&lt;/span&gt;, 0).GetInnerText());&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;The GetPopupWindow method returns a HtmlPage object that is representative of the window at that index.  This is pulled from the collection that is maintained by the framework with index zero being the main, or starting, window. In this example index zero is MyPage.aspx, while index one is the popup window.  &lt;/p&gt;

&lt;h3&gt;The ability to find elements by partial attribute values&lt;/h3&gt;

&lt;p&gt;In previous versions of the framework when finding elements on a page you could only use the ID attribute to match against.  So if you wanted to match all the elements that had a CSS class applied to them, as is common in jQuery, you had to supply that whole value for the class attribute.  So, in previous versions of the framework if you wanted to find elements that had a CSS class applied to them you had to specify the whole value for the class attribute.  Meaning that if the element has more than only class and you search based on only one class that element would not be returned.  Now you have the ability to match based on any part of the value for the attribute. Below is an example of how to find elements that have the CSS Class “blue” applied to them.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: #2b91af"&gt;HtmlElementFindParams &lt;/span&gt;find = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;HtmlElementFindParams&lt;/span&gt;();
find.Attributes.Add(&lt;span style="color: #a31515"&gt;"class"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"blue"&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;MatchMethod&lt;/span&gt;.Contains);
&lt;span style="color: #2b91af"&gt;ReadOnlyCollection&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;HtmlElement&lt;/span&gt;&amp;gt; elements = page.Elements.FindAll(find);&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;h3&gt;Assembly name change&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;The assembly name has been changed from “&lt;em&gt;Microsoft.Web.Testing.Light&lt;/em&gt;” to “&lt;em&gt;Microsoft.Web.Testing.Lightweight.&lt;/em&gt;” The namespaces have not changed. &lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://blog.osbornm.com/aggbug/67.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bRdnIuCqpvJUhEdu47drcyu-lHo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bRdnIuCqpvJUhEdu47drcyu-lHo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bRdnIuCqpvJUhEdu47drcyu-lHo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bRdnIuCqpvJUhEdu47drcyu-lHo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
            <dc:creator>Matthew M. Osborn</dc:creator>
            <guid>http://blog.osbornm.com/archive/2009/04/09/67.aspx</guid>
            <pubDate>Thu, 09 Apr 2009 19:10:50 GMT</pubDate>
            <wfw:comment>http://blog.osbornm.com/comments/67.aspx</wfw:comment>
            <comments>http://blog.osbornm.com/archive/2009/04/09/67.aspx#feedback</comments>
            <wfw:commentRss>http://blog.osbornm.com/comments/commentRss/67.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Podcast Playlist</title>
            <category>Code Tips &amp; Tricks</category>
            <link>http://blog.osbornm.com/archive/2009/04/07/66.aspx</link>
            <description>&lt;p&gt;Each day my commute takes anywhere from 45 minutes to 1 hour depending on the traffic and if I ride the bus.  About a year ago, I decided to make the most of the stop and go traffic and start listening to podcasts in hopes that I might learn a thing or two. Most people at work know that I am an avid podcast listener and always ask me for my favorites, so I figured I would compile a list of my top tech/geek podcasts.&lt;/p&gt;
&lt;table id="podcasts" class="zebraTable"&gt;
    &lt;thead&gt;
        &lt;tr&gt;
            &lt;th class="rating"&gt;Rating * &lt;/th&gt;
            &lt;th class="name"&gt;Name &lt;/th&gt;
            &lt;th class="genre"&gt;Type &lt;/th&gt;
        &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://www.pwop.com/feed.aspx?show=dotnetrocks&amp;amp;filetype=master"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; .NET Rocks &lt;/td&gt;
            &lt;td class="genre"&gt;Code/Interview&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://feeds.feedburner.com/altnetpodcast"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Alt.NET &lt;/td&gt;
            &lt;td class="genre"&gt;Code&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://www.researchchannel.org/podcasts/dynamic_rc.aspx?fid=1806&amp;amp;type=2"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Behind the Code &lt;/td&gt;
            &lt;td class="genre"&gt;Code/Interview&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://blog.stackoverflow.com/index.php?feed=podcast"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; StackOverFlow &lt;/td&gt;
            &lt;td class="genre"&gt;Code&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://feeds.feedburner.com/boagworldpodcast/"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Boagworld&lt;/td&gt;
            &lt;td class="genre"&gt;Web Design&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://channel9.msdn.com/Feeds/RSS/"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Channel 9 &lt;/td&gt;
            &lt;td class="genre"&gt;Code/Interview&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://on10.net/Feeds/RSS/"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Channel 10 &lt;/td&gt;
            &lt;td class="genre"&gt;Interview/Misc&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://feeds2.feedburner.com/elegantcodecast"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Elegant Code &lt;/td&gt;
            &lt;td class="genre"&gt;Code&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://feeds.feedburner.com/GoogleDeveloperPodcast"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Google Developer Podcast &lt;/td&gt;
            &lt;td class="genre"&gt;Code&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://feeds.feedburner.com/HanselminutesCompleteMP3"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Hanselminutes &lt;/td&gt;
            &lt;td class="genre"&gt;Code/Interview&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://herdingcode.com/?feed=rss2"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Herding Code &lt;/td&gt;
            &lt;td class="genre"&gt;Code&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://pixel8.infragistics.com/podcast/feed"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Pixel8 &lt;/td&gt;
            &lt;td class="genre"&gt;Code/Interview&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://feeds.feedburner.com/rubyonrailspodcast"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Ruby on Rails Podcast &lt;/td&gt;
            &lt;td class="genre"&gt;Code&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://revision3.com/systm/feed/quicktime-high-definition/"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; System &lt;/td&gt;
            &lt;td class="genre"&gt;Hardware/Geek&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://therissingtonpodcast.co.uk/feedmemp3"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; The Rissington Podcast &lt;/td&gt;
            &lt;td class="genre"&gt;Web Design&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://leoville.tv/podcasts/twit.xml"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; This Week in Tech (twit) &lt;/td&gt;
            &lt;td class="genre"&gt;Geek&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://revision3.com/pixelperfect/#subscribe"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Pixel Perfect &lt;/td&gt;
            &lt;td class="genre"&gt;Photoshop&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://codingqa.com/rss"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Coding QA Podcast &lt;/td&gt;
            &lt;td class="genre"&gt;Code/QA&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;span&gt;&lt;font color="#c0c0c0" size="1"&gt;* Based on the frequency I listien to them and overall content&lt;/font&gt;&lt;/span&gt;&lt;img src="http://blog.osbornm.com/aggbug/66.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/V7U_PmoyPLuZEsHn3nIZHZb-FYc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V7U_PmoyPLuZEsHn3nIZHZb-FYc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/V7U_PmoyPLuZEsHn3nIZHZb-FYc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V7U_PmoyPLuZEsHn3nIZHZb-FYc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
            <dc:creator>Matthew M. Osborn</dc:creator>
            <guid>http://blog.osbornm.com/archive/2009/04/07/66.aspx</guid>
            <pubDate>Wed, 08 Apr 2009 06:22:00 GMT</pubDate>
            <wfw:comment>http://blog.osbornm.com/comments/66.aspx</wfw:comment>
            <comments>http://blog.osbornm.com/archive/2009/04/07/66.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.osbornm.com/comments/commentRss/66.aspx</wfw:commentRss>
        </item>
        <item>
            <title>ASP.NET QA Podcast &amp;ndash; Episode 3</title>
            <category>ASP .NET</category>
            <category>Podcast</category>
            <link>http://blog.osbornm.com/archive/2009/03/31/64.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;&lt;strong&gt;Download :&lt;/strong&gt; &lt;/font&gt;&lt;font size="2"&gt;&lt;a href="http://cid-b387831f07f582b4.skydrive.live.com/self.aspx/ASP.NET%20QA%20Podcast/AspNetQAPodcast3%7C_Small.mp3"&gt;Episode 3&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;In the third installment of the ASP.NET QA Podcast Federico and Matthew interview Mark Berryman, a test lead on the ASP.NET QA Team.  Join them as they learn the ins and outs of test management through Mark’s eyes. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Release of the Mobile Browser Database by Live Dublin. &lt;/li&gt;    &lt;li&gt;April refresh of the Lightweight Test Automation Framework. &lt;/li&gt;    &lt;li&gt;Interview with Mark Berryman.      &lt;ul&gt;       &lt;li&gt;What is the difference between Test Manager and Test Lead. &lt;/li&gt;        &lt;li&gt;A little history of Mark and how he came to join the ASP.NET QA team. &lt;/li&gt;        &lt;li&gt;Responsibilities of a Test Lead / What Mark is working on. &lt;/li&gt;        &lt;li&gt;What Mark looks for in a tester on his team. &lt;/li&gt;        &lt;li&gt;Challenges Mark faced when he was an IC (individual Contributor). &lt;/li&gt;        &lt;li&gt;What Mark would change on items he has tested in the past. &lt;/li&gt;        &lt;li&gt;How Mark Manages risk on his team. &lt;/li&gt;        &lt;li&gt;Who is Marks favorite person in the whole world. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Links from the show :&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://mdbf.codeplex.com/"&gt;Mobile Browser Database&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="mailto:farmas@microsoft.com"&gt;Federico’s Email&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="mailto:mosborn@microsoft.com"&gt;Matthew’ Email&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/asptest"&gt;ASP.NET QA Team Blog&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blog.osbornm.com/aggbug/64.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Uly89b7Cbu3qaUCJMexxS-tur1A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Uly89b7Cbu3qaUCJMexxS-tur1A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Uly89b7Cbu3qaUCJMexxS-tur1A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Uly89b7Cbu3qaUCJMexxS-tur1A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
            <dc:creator>Matthew M. Osborn</dc:creator>
            <guid>http://blog.osbornm.com/archive/2009/03/31/64.aspx</guid>
            <pubDate>Tue, 31 Mar 2009 23:08:59 GMT</pubDate>
            <wfw:comment>http://blog.osbornm.com/comments/64.aspx</wfw:comment>
            <comments>http://blog.osbornm.com/archive/2009/03/31/64.aspx#feedback</comments>
            <wfw:commentRss>http://blog.osbornm.com/comments/commentRss/64.aspx</wfw:commentRss>
        </item>
        <item>
            <title>ASP.NET QA Podcast &amp;ndash; Episode 2</title>
            <link>http://blog.osbornm.com/archive/2009/03/20/63.aspx</link>
            <description>&lt;p&gt;In the second installment of the ASP.NET QA Podcast Federico and Matthew discuss MIX 09 announcements and the ins and outs of supporting various browser versions on the ASP.NET QA team.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;MIX 09 Conference announcements      &lt;ul&gt;       &lt;li&gt;MVC RTM 1.0 &lt;/li&gt;        &lt;li&gt;Silverlight 3.0 &lt;/li&gt;        &lt;li&gt;Web Application Installer &lt;/li&gt;        &lt;li&gt;Web Application Gallery &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;What browsers the team tests on and how they decided which browsers to test. &lt;/li&gt;    &lt;li&gt;What it means when the team says they support a browser. &lt;/li&gt;    &lt;li&gt;How the team manages the risk of not testing on every possible browser. &lt;/li&gt;    &lt;li&gt;The timeline for testing features on multiple browsers. &lt;/li&gt;    &lt;li&gt;The infrastructure the team has to test on multiple browsers. &lt;/li&gt;    &lt;li&gt;How the team keeps up with the fast growing browser market, such as the release of four major browsers in just a few months. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Links from the show :&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b&amp;amp;displaylang=en"&gt;ASP.NET MVC RTM 1.0&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://silverlight.net/getstarted/silverlight3/default.aspx"&gt;Silverlight 3.0&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/web/downloads/platform.aspx"&gt;Web application installer&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/web/gallery/"&gt;Web application gallery&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="mailto:farmas@microsoft.com"&gt;Federico’s Email&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="mailto:mosborn@microsoft.com"&gt;Matthew’ Email&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/asptest"&gt;ASP.NET QA Team Blog&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;strong&gt;Download :&lt;/strong&gt; &lt;/font&gt;&lt;a title="ASP.NET QA Podcast - Episode 1" href="http://cid-b387831f07f582b4.skydrive.live.com/self.aspx/ASP.NET%20QA%20Podcast/AspNetQAPodcast2%7C_Small.mp3"&gt;&lt;font size="2"&gt;Episode 2&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blog.osbornm.com/aggbug/63.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sPFX3qcmXWnWx813rGpGcoYeQqc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sPFX3qcmXWnWx813rGpGcoYeQqc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sPFX3qcmXWnWx813rGpGcoYeQqc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sPFX3qcmXWnWx813rGpGcoYeQqc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
            <dc:creator>Matthew M. Osborn</dc:creator>
            <guid>http://blog.osbornm.com/archive/2009/03/20/63.aspx</guid>
            <pubDate>Fri, 20 Mar 2009 18:52:26 GMT</pubDate>
            <wfw:comment>http://blog.osbornm.com/comments/63.aspx</wfw:comment>
            <comments>http://blog.osbornm.com/archive/2009/03/20/63.aspx#feedback</comments>
            <wfw:commentRss>http://blog.osbornm.com/comments/commentRss/63.aspx</wfw:commentRss>
        </item>
        <item>
            <title>ASP.NET QA Podcast – Episode 1</title>
            <link>http://blog.osbornm.com/archive/2009/03/11/62.aspx</link>
            <description>&lt;p&gt;In the first ever ASP.NET QA Podcast Federico and Matthew discuss the motivation behind the community involvement from the QA team and the release of the QA team’s Lightweight Test Automation Framework for ASP.NET and what it is.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Introductions to the podcasters, Federico and Matthew. &lt;/li&gt;
    &lt;li&gt;What is it that the ASP.NET QA team does. &lt;/li&gt;
    &lt;li&gt;The recent release of ASP.NET MVC RC2. &lt;/li&gt;
    &lt;li&gt;The recent release of the source code to the Lightweight Test Automation Framework. &lt;/li&gt;
    &lt;li&gt;The purpose of the release of the framework to codeplex.com and where it fits in the market. &lt;/li&gt;
    &lt;li&gt;Why the QA team chose to write their own automation framework. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Links from the show :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://aspnet.codeplex.com/Wiki/View.aspx?title=MVC"&gt;ASP.NET MVC RC2 Release&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a href="mailto:farmas@microsoft.com"&gt;Federico’s Email&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a href="mailto:mosborn@microsoft.com"&gt;Matthew’s Email&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a href="http://forums.asp.net/1193.aspx"&gt;Lightweight Test Automation Framework forum&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a href="http://aspnet.codeplex.com/Wiki/View.aspx?title=ASP.NET%20QA"&gt;Download The Lightweight Test Automation Framework&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Disclaimer :&lt;/strong&gt; This is our first try at creating, editing, and publishing a podcast.  Please bear with us as we iron out all the wrinkles in the process. Your feedback is greatly appreciated. &lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;strong&gt;Download :&lt;/strong&gt; &lt;/font&gt;&lt;a title="ASP.NET QA Podcast - Episode 1" href="http://cid-b387831f07f582b4.skydrive.live.com/self.aspx/ASP.NET%20QA%20Podcast/AspNetQAPodcast1.mp3"&gt;&lt;font size="2"&gt;Episode 1&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blog.osbornm.com/aggbug/62.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5ocC8JTLDlZK1JWOTQk6QOyfHuQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5ocC8JTLDlZK1JWOTQk6QOyfHuQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5ocC8JTLDlZK1JWOTQk6QOyfHuQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5ocC8JTLDlZK1JWOTQk6QOyfHuQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
            <dc:creator>Matthew M. Osborn</dc:creator>
            <guid>http://blog.osbornm.com/archive/2009/03/11/62.aspx</guid>
            <pubDate>Thu, 12 Mar 2009 04:53:21 GMT</pubDate>
            <wfw:comment>http://blog.osbornm.com/comments/62.aspx</wfw:comment>
            <comments>http://blog.osbornm.com/archive/2009/03/11/62.aspx#feedback</comments>
            <wfw:commentRss>http://blog.osbornm.com/comments/commentRss/62.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Lightweight Test Automation Framework Source Released!</title>
            <link>http://blog.osbornm.com/archive/2009/02/11/59.aspx</link>
            <description>&lt;p&gt;The Asp.NET QA team has been working to make what we do and our processes more visible to our customers.  Two major things we have done to increase this are, releasing the Lightweight Test Automation Framework binaries with a sample to Codeplex.com and starting our &lt;a href="http://weblogs.asp.net/asptest"&gt;ASP.NET QA Blog&lt;/a&gt;.  Well, over the last week we reached another milestone by releasing the source to the Lightweight Test Automation Framework on Codeplex.com.  This is the first time we have tried to do something like this on the ASP.NET QA team and we are very excited.  Visit &lt;a href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=22739"&gt;Codeplex.com&lt;/a&gt; and check it out for yourself!&lt;/p&gt;  &lt;p&gt;Items Updated in the February Update of the Lightweight Test Automation Framework include&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.codeplex.com/aspnet/Wiki/View.aspx?title=Lightweight%20Test%20Automation%20Framework%20Road%20Map"&gt;Lightweight Test Automation Framework road map&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/aspnet/Wiki/View.aspx?title=Lightweight%20Test%20Automation%20Framework%20release%20notes"&gt;Lightweight Test Automation Framework release notes&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=22739"&gt;Lightweight Test Automation Framework for ASP.NET Samples&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=22739"&gt;Lightweight Test Automation Framework for ASP.NET Source&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Thanks go out to all those who have helped to get this release out the door, with a special thanks to the lead developer Federico Silva Armas.&lt;/p&gt;&lt;img src="http://blog.osbornm.com/aggbug/59.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FjJ14mXX_HfY12MWVuwKeoS4-x4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FjJ14mXX_HfY12MWVuwKeoS4-x4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FjJ14mXX_HfY12MWVuwKeoS4-x4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FjJ14mXX_HfY12MWVuwKeoS4-x4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
            <dc:creator>Matthew M. Osborn</dc:creator>
            <guid>http://blog.osbornm.com/archive/2009/02/11/59.aspx</guid>
            <pubDate>Thu, 12 Feb 2009 02:01:23 GMT</pubDate>
            <wfw:comment>http://blog.osbornm.com/comments/59.aspx</wfw:comment>
            <comments>http://blog.osbornm.com/archive/2009/02/11/59.aspx#feedback</comments>
            <wfw:commentRss>http://blog.osbornm.com/comments/commentRss/59.aspx</wfw:commentRss>
        </item>
        <item>
            <title>ASP.NET 4.0 ClientID Overview</title>
            <link>http://blog.osbornm.com/archive/2009/01/06/asp.net-4.0-clientid-overview-again.aspx</link>
            <description>&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;One of the new features being added to version 4.0 of ASP.NET is the ability to control the client side IDs that are generated by the framework.  Previously the framework would modify the client side IDs to uniquely identify each control.  This some times left you with the ID you defined in markup or sometimes left you with something that looks like this, “ctl00_MasterPageBody_ctl01_Textbox1.”&lt;/p&gt;
&lt;h2&gt;The Problem&lt;/h2&gt;
&lt;p&gt;The modification of the client side id property works great to ensure that each element is uniquely identified, however, to anyone that has tried to do any sort of client side scripting this becomes very frustrating. Chances are that if you have worked in ASP.NET for any time at all you have run into this issue.  The problem is that until runtime you do not what the client side ID could be, making it difficult to do any kind of client side scripting.  In addition any modification of the page, adding removing controls, can result in a different client side ID being generated. &lt;/p&gt;
&lt;h2&gt;Old Solution&lt;/h2&gt;
&lt;p&gt;Again if you have worked with ASP.NET for any amount of time you know there is a work around for this issue.  Each control has a property called ClientID that is a read only and supplies the unique client side ID.  You can use this in a code behind when dynamically adding scripts, or more commonly use inline code (old ASP style) to supply the value to and client side scripts.&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;script &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="text/javascript"&amp;gt;
    function &lt;/span&gt;DoSomething(){
        alert(&lt;span style="COLOR: #a31515"&gt;'&amp;lt;%= Control.ClientID %&amp;gt;'&lt;/span&gt;);
    }
&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;script&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;h2&gt;ASP.NET 4.0 Solution&lt;/h2&gt;
&lt;p&gt;First off let me start by explaining why we decided to tackle this problem in version 4.0 of the framework.  While we provided a way of supplying the developer with the client side ID, with the growth of client side scripting this solution has become some what hacky.  There is not really a clean way to use this with lots of controls and lots of external script files.  Also it might have had something to do with the developer asking for control over this.  Developers do love to have control of everything, weather they use it or not, it’s just our nature :) The solution that we came up has four ‘modes’ that a user can use giving them everything from existing behavior to full control.  The controls ID property is modified according to the ClientIDMode mode and then used as the client side id.&lt;/p&gt;
&lt;h4&gt;Modes and what they do&lt;/h4&gt;
&lt;p&gt;There is now a new property on every control (this includes pages and master pages as they inherit from control) called ClientIDMode that is used to select the behavior of the client side ID.&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Label &lt;/span&gt;&lt;span style="COLOR: red"&gt;ID&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Label1" &lt;/span&gt;&lt;span style="COLOR: red"&gt;runat&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="server" &lt;/span&gt;&lt;span style="COLOR: red"&gt;ClientIDMode&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="[Mode Type]" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;The Mode Types&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Legacy&lt;/strong&gt;: The default value if ClientIDMode is not set anywhere in the control hierarchy.  This causes client side IDs to behave the way they did in version 2.0 (3.0 and 3.5 did not change this code path) of the framework. This mode will generate an ID similar to “ctl00_MasterPageBody_ctl01_Textbox1.” &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Inherit&lt;/strong&gt;: This is the default behavior for every control.  This looks to the controls parent to get its value for ClientIDMode.  You do not need to set this on every control as it is the default, this is used only when the ClientIDMode has been changed and the new desired behavior is to inherit from the controls parent. &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Static&lt;/strong&gt;: This mode does exactly what you think it would, it makes the client side ID static. Meaning that what you put for the ID is what will be used for the client side ID.  Warning, this means that if a static ClientIDMode is used in a repeating control the developer is responsible for ensuring client side ID uniqueness. &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Predictable&lt;/strong&gt;: This mode is used when the framework needs to ensure uniqueness but it needs to be done so in a predictable way.  The most common use for this mode is on databound controls.  The framework will traverse the control hierarchy prefixing the supplied ID with it’s parent control ID until it reaches a control in the hierarchy whose ClientIDMode is defined as static.  In the event that the control is placed inside a databound control a suffix with a value that identifies that instance will also be added to the supplied ID.  The ClientIDRowSuffix property is used to control the value that will be used as a suffix (see samples).  This mode will generate an ID similar to “Gridview1_Label1_0” &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Samples&lt;/h2&gt;
&lt;h3&gt; &lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Legacy Mode&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Legacy mode is pretty straight forward, it generates a client side ID the way that it had in version 2.0 of the framework.&lt;/p&gt;
&lt;p&gt;markup:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt; &lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TextBox &lt;/span&gt;&lt;span style="COLOR: red"&gt;ID&lt;/span&gt; &lt;span style="COLOR: blue"&gt;="txtEcho" &lt;/span&gt;&lt;span style="COLOR: red"&gt;runat&lt;/span&gt; &lt;span style="COLOR: blue"&gt;="server" &lt;/span&gt;&lt;span style="COLOR: red"&gt;Width&lt;/span&gt; &lt;span style="COLOR: blue"&gt;="65%" &lt;/span&gt;&lt;span style="COLOR: red"&gt;ClientIDMode&lt;/span&gt; &lt;span style="COLOR: blue"&gt;="Legacy" /&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;p&gt;output:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;input &lt;/span&gt;&lt;span style="COLOR: red"&gt;id&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="ctl00_MasterPageBody_ctl00_txtEcho" &lt;/span&gt;&lt;span style="COLOR: red"&gt;style&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="&lt;/span&gt;&lt;span style="COLOR: red"&gt;width&lt;/span&gt;: &lt;span style="COLOR: blue"&gt;65%" &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="ctl00$MasterPageBody$ctl00$txtEcho" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Static Mode&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Static is the most basic of all ClientIDMode modes, what you give for the ID is what you get for the client side ID. Once again a warning that if a static ClientIDMode is used inside of a repeated control it is the developer’s responsibility to ensure client side ID uniqueness.&lt;/p&gt;
&lt;p&gt;markup:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TextBox &lt;/span&gt;&lt;span style="COLOR: red"&gt;ID&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="txtEcho2" &lt;/span&gt;&lt;span style="COLOR: red"&gt;runat&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="server" &lt;/span&gt;&lt;span style="COLOR: red"&gt;Width&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="65%" &lt;/span&gt;&lt;span style="COLOR: red"&gt;ClientIDMode&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Static" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;output:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;input &lt;/span&gt;&lt;span style="COLOR: red"&gt;id&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="txtEcho2" &lt;/span&gt;&lt;span style="COLOR: red"&gt;style&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="&lt;/span&gt;&lt;span style="COLOR: red"&gt;width&lt;/span&gt;: &lt;span style="COLOR: blue"&gt;65%" &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="ctl00$MasterPageBody$ctl00$txtEcho2" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Predictable Mode&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Predictable mode really tackles the heart of the problem.  The framework previously generated it’s unique IDs to prevent ID collisions and the most common place for these types of collisions are inside databound controls.  Predictable mode is really designed to work with databound controls but does not have to.  There is three ways to uses the predictable mode, each one of these is defined through the ClientIDRowSuffix property that specifies the suffix for each instance.  The ClientIDRowSuffix uses values from the control’s datakeys collection, so if the control does not have a datakeys collection this property is not viable.  If this property is not set or is not available the row index will be used in it’s place. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; With no ClientIDRowSuffix defined, this is also the behavior for databound controls without a datakeys collection e.g. Repeater Control.  Notice that the framework has traversed the control hierarchy and prefixed the ID with the parent’s ID and suffixed the ID with row index. &lt;/p&gt;
&lt;p&gt;markup:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;GridView &lt;/span&gt;&lt;span style="COLOR: red"&gt;ID&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeesNoSuffix" &lt;/span&gt;&lt;span style="COLOR: red"&gt;runat&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="server" &lt;/span&gt;&lt;span style="COLOR: red"&gt;AutoGenerateColumns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="false" &lt;/span&gt;&lt;span style="COLOR: red"&gt;ClientIDMode&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Predictable" &amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Columns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TemplateField &lt;/span&gt;&lt;span style="COLOR: red"&gt;HeaderText&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="ID"&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ItemTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Label &lt;/span&gt;&lt;span style="COLOR: red"&gt;ID&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeeID" &lt;/span&gt;&lt;span style="COLOR: red"&gt;runat&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="server" &lt;/span&gt;&lt;span style="COLOR: red"&gt;Text&lt;/span&gt;&lt;span style="COLOR: blue"&gt;='&lt;/span&gt;&lt;span style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/span&gt;# Eval("ID") &lt;span style="BACKGROUND: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;' /&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ItemTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TemplateField&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TemplateField &lt;/span&gt;&lt;span style="COLOR: red"&gt;HeaderText&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Name"&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ItemTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Label &lt;/span&gt;&lt;span style="COLOR: red"&gt;ID&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeeName" &lt;/span&gt;&lt;span style="COLOR: red"&gt;runat&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="server" &lt;/span&gt;&lt;span style="COLOR: red"&gt;Text&lt;/span&gt;&lt;span style="COLOR: blue"&gt;='&lt;/span&gt;&lt;span style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/span&gt;# Eval("Name") &lt;span style="BACKGROUND: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;' /&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ItemTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TemplateField&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Columns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;GridView&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;output:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;table &lt;/span&gt;&lt;span style="COLOR: red"&gt;id&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeesNoSuffix" &lt;/span&gt;&lt;span style="COLOR: red"&gt;style&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="&lt;/span&gt;&lt;span style="COLOR: red"&gt;border-collapse&lt;/span&gt;: &lt;span style="COLOR: blue"&gt;collapse" &lt;/span&gt;&lt;span style="COLOR: red"&gt;cellspacing&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="0" &lt;/span&gt;&lt;span style="COLOR: red"&gt;rules&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="all" &lt;/span&gt;&lt;span style="COLOR: red"&gt;border&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tbody&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tr&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;th &lt;/span&gt;&lt;span style="COLOR: red"&gt;scope&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="col"&amp;gt;&lt;/span&gt;ID&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;th&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;th &lt;/span&gt;&lt;span style="COLOR: red"&gt;scope&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="col"&amp;gt;&lt;/span&gt;Name&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;th&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tr&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tr&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span &lt;/span&gt;&lt;span style="COLOR: red"&gt;id&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeesNoSuffix_EmployeeID_0"&amp;gt;&lt;/span&gt;1&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span &lt;/span&gt;&lt;span style="COLOR: red"&gt;id&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeesNoSuffix_EmployeeName_0"&amp;gt;&lt;/span&gt;EmployeeName1&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tr&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &lt;/span&gt;...
        &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tr&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span &lt;/span&gt;&lt;span style="COLOR: red"&gt;id&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeesNoSuffix_EmployeeID_8"&amp;gt;&lt;/span&gt;9&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span &lt;/span&gt;&lt;span style="COLOR: red"&gt;id&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeesNoSuffix_EmployeeName_8"&amp;gt;&lt;/span&gt;EmployeeName9&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tr&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tbody&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;table&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; With a ClientIDRowSuffix defined, this looks in the control’s datakeys collection for the value and then suffixes the ID with that value.&lt;/p&gt;
&lt;p&gt;markup:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;GridView &lt;/span&gt;&lt;span style="COLOR: red"&gt;ID&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeesSuffix" &lt;/span&gt;&lt;span style="COLOR: red"&gt;runat&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="server" &lt;/span&gt;&lt;span style="COLOR: red"&gt;AutoGenerateColumns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="false" &lt;/span&gt;&lt;span style="COLOR: red"&gt;ClientIDMode&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Predictable" &lt;/span&gt;&lt;span style="COLOR: red"&gt;ClientID&lt;span style="COLOR: red"&gt;Row&lt;/span&gt;Suffix&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="ID" &amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Columns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TemplateField &lt;/span&gt;&lt;span style="COLOR: red"&gt;HeaderText&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="ID"&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ItemTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Label &lt;/span&gt;&lt;span style="COLOR: red"&gt;ID&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeeID" &lt;/span&gt;&lt;span style="COLOR: red"&gt;runat&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="server" &lt;/span&gt;&lt;span style="COLOR: red"&gt;Text&lt;/span&gt;&lt;span style="COLOR: blue"&gt;='&lt;/span&gt;&lt;span style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/span&gt;# Eval("ID") &lt;span style="BACKGROUND: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;' /&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ItemTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TemplateField&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TemplateField &lt;/span&gt;&lt;span style="COLOR: red"&gt;HeaderText&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Name"&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ItemTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Label &lt;/span&gt;&lt;span style="COLOR: red"&gt;ID&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeeName" &lt;/span&gt;&lt;span style="COLOR: red"&gt;runat&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="server" &lt;/span&gt;&lt;span style="COLOR: red"&gt;Text&lt;/span&gt;&lt;span style="COLOR: blue"&gt;='&lt;/span&gt;&lt;span style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/span&gt;# Eval("Name") &lt;span style="BACKGROUND: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;' /&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ItemTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TemplateField&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Columns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;GridView&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;output:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;table &lt;/span&gt;&lt;span style="COLOR: red"&gt;id&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeesSuffix" &lt;/span&gt;&lt;span style="COLOR: red"&gt;style&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="&lt;/span&gt;&lt;span style="COLOR: red"&gt;border-collapse&lt;/span&gt;: &lt;span style="COLOR: blue"&gt;collapse" &lt;/span&gt;&lt;span style="COLOR: red"&gt;cellspacing&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="0" &lt;/span&gt;&lt;span style="COLOR: red"&gt;rules&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="all" &lt;/span&gt;&lt;span style="COLOR: red"&gt;border&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tbody&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tr&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;th &lt;/span&gt;&lt;span style="COLOR: red"&gt;scope&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="col"&amp;gt;&lt;/span&gt;ID&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;th&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;th &lt;/span&gt;&lt;span style="COLOR: red"&gt;scope&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="col"&amp;gt;&lt;/span&gt;Name&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;th&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tr&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tr&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span &lt;/span&gt;&lt;span style="COLOR: red"&gt;id&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeesSuffix_EmployeeID_1"&amp;gt;&lt;/span&gt;1&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span &lt;/span&gt;&lt;span style="COLOR: red"&gt;id&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeesSuffix_EmployeeName_1"&amp;gt;&lt;/span&gt;EmployeeName1&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tr&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &lt;/span&gt;...
        &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tr&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span &lt;/span&gt;&lt;span style="COLOR: red"&gt;id&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeesSuffix_EmployeeID_9"&amp;gt;&lt;/span&gt;9&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span &lt;/span&gt;&lt;span style="COLOR: red"&gt;id&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeesSuffix_EmployeeName_9"&amp;gt;&lt;/span&gt;EmployeeName9&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tr&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tbody&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;table&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;3. With a ClientIDRowSuffix defined, but instead of just one value a compound value will be used.  Exhibits the same behavior as one value but it will suffix both values onto the ID.&lt;/p&gt;
&lt;p&gt;markup:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;GridView &lt;/span&gt;&lt;span style="COLOR: red"&gt;ID&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeesCompSuffix" &lt;/span&gt;&lt;span style="COLOR: red"&gt;runat&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="server" &lt;/span&gt;&lt;span style="COLOR: red"&gt;AutoGenerateColumns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="false" &lt;/span&gt;&lt;span style="COLOR: red"&gt;ClientIDMode&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Predictable" &lt;/span&gt;&lt;span style="COLOR: red"&gt;ClientIDRowSuffix&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="ID, Name" &amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Columns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TemplateField &lt;/span&gt;&lt;span style="COLOR: red"&gt;HeaderText&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="ID"&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ItemTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Label &lt;/span&gt;&lt;span style="COLOR: red"&gt;ID&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeeID" &lt;/span&gt;&lt;span style="COLOR: red"&gt;runat&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="server" &lt;/span&gt;&lt;span style="COLOR: red"&gt;Text&lt;/span&gt;&lt;span style="COLOR: blue"&gt;='&lt;/span&gt;&lt;span style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/span&gt;# Eval("ID") &lt;span style="BACKGROUND: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;' /&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ItemTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TemplateField&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TemplateField &lt;/span&gt;&lt;span style="COLOR: red"&gt;HeaderText&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Name"&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ItemTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Label &lt;/span&gt;&lt;span style="COLOR: red"&gt;ID&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeeName" &lt;/span&gt;&lt;span style="COLOR: red"&gt;runat&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="server" &lt;/span&gt;&lt;span style="COLOR: red"&gt;Text&lt;/span&gt;&lt;span style="COLOR: blue"&gt;='&lt;/span&gt;&lt;span style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/span&gt;# Eval("Name") &lt;span style="BACKGROUND: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;' /&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ItemTemplate&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;TemplateField&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Columns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;GridView&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;output:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;table &lt;/span&gt;&lt;span style="COLOR: red"&gt;id&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeesCompSuffix" &lt;/span&gt;&lt;span style="COLOR: red"&gt;style&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="&lt;/span&gt;&lt;span style="COLOR: red"&gt;border-collapse&lt;/span&gt;: &lt;span style="COLOR: blue"&gt;collapse" &lt;/span&gt;&lt;span style="COLOR: red"&gt;cellspacing&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="0" &lt;/span&gt;&lt;span style="COLOR: red"&gt;rules&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="all" &lt;/span&gt;&lt;span style="COLOR: red"&gt;border&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tbody&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tr&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;th &lt;/span&gt;&lt;span style="COLOR: red"&gt;scope&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="col"&amp;gt;&lt;/span&gt;ID&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;th&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;th &lt;/span&gt;&lt;span style="COLOR: red"&gt;scope&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="col"&amp;gt;&lt;/span&gt;Name&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;th&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tr&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tr&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span &lt;/span&gt;&lt;span style="COLOR: red"&gt;id&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeesCompSuffix_EmployeeID_1_EmployeeName1"&amp;gt;&lt;/span&gt;1&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span &lt;/span&gt;&lt;span style="COLOR: red"&gt;id&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeesCompSuffix_EmployeeName_1_EmployeeName1"&amp;gt;&lt;/span&gt;EmployeeName1&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tr&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &lt;/span&gt;...
        &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tr&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span &lt;/span&gt;&lt;span style="COLOR: red"&gt;id&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeesCompSuffix_EmployeeID_9_EmployeeName9"&amp;gt;&lt;/span&gt;9&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span &lt;/span&gt;&lt;span style="COLOR: red"&gt;id&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="EmployeesCompSuffix_EmployeeName_9_EmployeeName9"&amp;gt;&lt;/span&gt;EmployeeName9&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;span&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;td&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tr&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;tbody&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;table&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;The ability to fully control the client side IDs that are generated by the framework is a request that has not generated much noise but everyone seems to want it when you mention it.  We believe that we have found a good solution to the request and think that it adds some much need functionality for developer that use lots of client side scripting.  There is an early preview and a walk through of this feature in &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=922b4655-93d0-4476-bda4-94cf5f8d4814&amp;amp;DisplayLang=en"&gt;CTP build&lt;/a&gt; that we released at PDC 2008.  For more information and a much more detailed description of this feature read Scott Galloway’s blog &lt;a href="http://www.mostlylucid.net/archive/2008/11/03/way-too-much-information-on-control-ids-and-asp.net-4.0.aspx"&gt;post&lt;/a&gt;. &lt;/p&gt;&lt;img src="http://blog.osbornm.com/aggbug/58.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/k-07PuXoNlaQqrxrh_G95A5GcX0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k-07PuXoNlaQqrxrh_G95A5GcX0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/k-07PuXoNlaQqrxrh_G95A5GcX0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k-07PuXoNlaQqrxrh_G95A5GcX0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
            <dc:creator>Matthew M. Osborn</dc:creator>
            <guid>http://blog.osbornm.com/archive/2009/01/06/asp.net-4.0-clientid-overview-again.aspx</guid>
            <pubDate>Wed, 07 Jan 2009 01:41:10 GMT</pubDate>
            <wfw:comment>http://blog.osbornm.com/comments/58.aspx</wfw:comment>
            <comments>http://blog.osbornm.com/archive/2009/01/06/asp.net-4.0-clientid-overview-again.aspx#feedback</comments>
            <slash:comments>7</slash:comments>
            <wfw:commentRss>http://blog.osbornm.com/comments/commentRss/58.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>
