<?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:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Guy Harwood</title><link>http://weblogs.asp.net/guyharwood/default.aspx</link><description>UK based developer</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/GuyHarwood" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>jTouch - jQuery cheatsheet for your iPhone</title><link>http://feedproxy.google.com/~r/GuyHarwood/~3/ToYlvdT-pmo/jtouch-jquery-cheatsheet-for-your-iphone.aspx</link><pubDate>Wed, 17 Dec 2008 12:57:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6792585</guid><dc:creator>Guy Harwood</dc:creator><slash:comments>7</slash:comments><wfw:commentRss>http://weblogs.asp.net/guyharwood/rsscomments.aspx?PostID=6792585</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guyharwood/commentapi.aspx?PostID=6792585</wfw:comment><comments>http://weblogs.asp.net/guyharwood/archive/2008/12/17/jtouch-jquery-cheatsheet-for-your-iphone.aspx#comments</comments><description>&lt;p&gt;I stumbled across this neat little &lt;a href="http://labs.colorcharge.com/jtouch/" title="Phone app/site" target="_blank" mce_href="http://labs.colorcharge.com/jtouch/"&gt;iPhone app/site&lt;/a&gt; while checking out the &lt;a href="http://nettuts.s3.amazonaws.com/154_cheatsheet/jquery12_colorcharge.png" mce_href="http://nettuts.s3.amazonaws.com/154_cheatsheet/jquery12_colorcharge.png" target="_blank"&gt;jQuery cheatsheet&lt;/a&gt; made available by &lt;a href="http://www.colorcharge.com" mce_href="http://www.colorcharge.com" target="_blank"&gt;colorcharge.com&lt;/a&gt;&lt;/p&gt;
  
&lt;p&gt;Its called jTouch and gives you the jQuery API (currently only v1.2.3) as a nice browsable app on your iPhone...&lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/guyharwood/WindowsLiveWriter/jTouchjQuerycheatsheetforyouriPhone_B622/Picture%20001_2.png" mce_href="http://weblogs.asp.net/blogs/guyharwood/WindowsLiveWriter/jTouchjQuerycheatsheetforyouriPhone_B622/Picture%20001_2.png"&gt;&lt;img src="http://weblogs.asp.net/blogs/guyharwood/WindowsLiveWriter/jTouchjQuerycheatsheetforyouriPhone_B622/Picture%20001_thumb.png" style="border: 0px none ;" alt="Picture 001" mce_src="http://weblogs.asp.net/blogs/guyharwood/WindowsLiveWriter/jTouchjQuerycheatsheetforyouriPhone_B622/Picture%20001_thumb.png" border="0" width="164" height="244"&gt;&lt;/a&gt;&amp;nbsp; &lt;a href="http://weblogs.asp.net/blogs/guyharwood/WindowsLiveWriter/jTouchjQuerycheatsheetforyouriPhone_B622/Picture%20002_2.png" mce_href="http://weblogs.asp.net/blogs/guyharwood/WindowsLiveWriter/jTouchjQuerycheatsheetforyouriPhone_B622/Picture%20002_2.png"&gt;&lt;img src="http://weblogs.asp.net/blogs/guyharwood/WindowsLiveWriter/jTouchjQuerycheatsheetforyouriPhone_B622/Picture%20002_thumb.png" style="border: 0px none ;" alt="Picture 002" mce_src="http://weblogs.asp.net/blogs/guyharwood/WindowsLiveWriter/jTouchjQuerycheatsheetforyouriPhone_B622/Picture%20002_thumb.png" border="0" width="164" height="244"&gt;&lt;/a&gt;&amp;nbsp; &lt;a href="http://weblogs.asp.net/blogs/guyharwood/WindowsLiveWriter/jTouchjQuerycheatsheetforyouriPhone_B622/Picture%20003_2.png" mce_href="http://weblogs.asp.net/blogs/guyharwood/WindowsLiveWriter/jTouchjQuerycheatsheetforyouriPhone_B622/Picture%20003_2.png"&gt;&lt;img src="http://weblogs.asp.net/blogs/guyharwood/WindowsLiveWriter/jTouchjQuerycheatsheetforyouriPhone_B622/Picture%20003_thumb.png" style="border: 0px none ;" alt="Picture 003" mce_src="http://weblogs.asp.net/blogs/guyharwood/WindowsLiveWriter/jTouchjQuerycheatsheetforyouriPhone_B622/Picture%20003_thumb.png" border="0" width="164" height="244"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2fguyharwood%2farchive%2f2008%2f12%2f17%2fjtouch-jquery-cheatsheet-for-your-iphone.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2fguyharwood%2farchive%2f2008%2f12%2f17%2fjtouch-jquery-cheatsheet-for-your-iphone.aspx" alt="kick it on DotNetKicks.com" border="0"&gt;&lt;/a&gt; &lt;br&gt;&lt;/p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2fguyharwood%2farchive%2f2008%2f12%2f17%2fjtouch-jquery-cheatsheet-for-your-iphone.aspx"&gt;&lt;/a&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6792585" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/guyharwood/archive/tags/asp.net/default.aspx">asp.net</category><category domain="http://weblogs.asp.net/guyharwood/archive/tags/jQuery/default.aspx">jQuery</category><category domain="http://weblogs.asp.net/guyharwood/archive/tags/iPhone/default.aspx">iPhone</category><feedburner:origLink>http://weblogs.asp.net/guyharwood/archive/2008/12/17/jtouch-jquery-cheatsheet-for-your-iphone.aspx</feedburner:origLink></item><item><title>Toggle items in a CheckBoxList using jQuery</title><link>http://feedproxy.google.com/~r/GuyHarwood/~3/sbH5x_DjlPo/toggle-items-in-a-checkboxlist-using-jquery.aspx</link><pubDate>Fri, 21 Nov 2008 09:44:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6749196</guid><dc:creator>Guy Harwood</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/guyharwood/rsscomments.aspx?PostID=6749196</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guyharwood/commentapi.aspx?PostID=6749196</wfw:comment><comments>http://weblogs.asp.net/guyharwood/archive/2008/11/21/toggle-items-in-a-checkboxlist-using-jquery.aspx#comments</comments><description>
&lt;p&gt;Just a little snippet of jQuery that i find useful for toggling selection of items in an asp.net CheckBoxList control.&lt;/p&gt;
  
&lt;ol&gt;   
&lt;li&gt;Set the CssClass of your CheckBoxList to recipientList &lt;/li&gt;
    
&lt;li&gt;Add a reference in your page/master to jQuery &lt;/li&gt;
    
&lt;li&gt;Add the following javascript into your page header.. &lt;/li&gt;
 &lt;/ol&gt;
  
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; toggleChecks(b) {&lt;br&gt;    $(&lt;span class="str"&gt;".recipientList input[type=checkbox]"&lt;/span&gt;).each(&lt;span class="kwrd"&gt;function&lt;/span&gt;() {&lt;br&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;typeof&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.&lt;span class="kwrd"&gt;checked&lt;/span&gt; != &lt;span class="str"&gt;"undefined"&lt;/span&gt;) {&lt;br&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (b == &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;br&gt;                &lt;span class="kwrd"&gt;this&lt;/span&gt;.&lt;span class="kwrd"&gt;checked&lt;/span&gt; = (!&lt;span class="kwrd"&gt;this&lt;/span&gt;.&lt;span class="kwrd"&gt;checked&lt;/span&gt;);&lt;br&gt;            &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br&gt;                &lt;span class="kwrd"&gt;this&lt;/span&gt;.&lt;span class="kwrd"&gt;checked&lt;/span&gt; = b;&lt;br&gt;        }&lt;br&gt;    });&lt;br&gt;}&lt;/pre&gt;

&lt;p&gt;Now you can have 3 links/buttons/images alongside your CheckBoxList – One to toggle the checked state of all checkboxes, one to set all checkboxes to checked, and finally one to uncheck all checkboxes.&amp;nbsp; &lt;/p&gt;

&lt;p&gt;Setting the parameter ‘b’ to null means ‘toggle the state’, true = checked and false = unchecked.&lt;/p&gt;

&lt;p&gt;My HTML for the links looks like this…&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="selectAll"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="selectionToggle"&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="toggleChecks(true);return false;"&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="#"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Select All&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="selectNone"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="selectionToggle"&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="toggleChecks(false);return false;"&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="#"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Select None&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="toggle"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="selectionToggle"&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="toggleChecks(null);return false;"&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="#"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Invert Selection&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;span class="kwrd"&gt;You can very easily wire the Javascript function into a &lt;a href="http://plugins.jquery.com/" mce_href="http://plugins.jquery.com/" target="_blank"&gt;jQuery plugin&lt;/a&gt; for all your projects.&lt;/span&gt;&lt;/p&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2fguyharwood%2farchive%2f2008%2f11%2f21%2ftoggle-items-in-a-checkboxlist-using-jquery.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2fguyharwood%2farchive%2f2008%2f11%2f21%2ftoggle-items-in-a-checkboxlist-using-jquery.aspx" alt="kick it on DotNetKicks.com" border="0"&gt;&lt;/a&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6749196" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/guyharwood/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://weblogs.asp.net/guyharwood/archive/tags/asp.net/default.aspx">asp.net</category><category domain="http://weblogs.asp.net/guyharwood/archive/tags/controls/default.aspx">controls</category><category domain="http://weblogs.asp.net/guyharwood/archive/tags/jQuery/default.aspx">jQuery</category><feedburner:origLink>http://weblogs.asp.net/guyharwood/archive/2008/11/21/toggle-items-in-a-checkboxlist-using-jquery.aspx</feedburner:origLink></item><item><title>Subsonic 3.0</title><link>http://feedproxy.google.com/~r/GuyHarwood/~3/5Gd0ISMaN9Y/subsonic-3-0.aspx</link><pubDate>Thu, 13 Nov 2008 14:30:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6733206</guid><dc:creator>Guy Harwood</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/guyharwood/rsscomments.aspx?PostID=6733206</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guyharwood/commentapi.aspx?PostID=6733206</wfw:comment><comments>http://weblogs.asp.net/guyharwood/archive/2008/11/13/subsonic-3-0.aspx#comments</comments><description>&lt;p&gt;Have to say im pretty excited about Subsonic 3 having just read &lt;a href="http://blog.wekeroad.com/blog/subsonic-3-0-preview-2/" mce_href="http://blog.wekeroad.com/blog/subsonic-3-0-preview-2/"&gt;Rob Conerys latest post about preview 2&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The short video is well worth watching, and the music over it is great too :-)&lt;/p&gt;&lt;p&gt;&amp;nbsp;After feeling rather despondent following &lt;a href="http://blogs.msdn.com/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx" mce_href="http://blogs.msdn.com/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx"&gt;recent news about LINQ to SQL&lt;/a&gt; this is starting to look like a good way forward.&lt;/p&gt;&lt;p&gt;Maybe thats what Microsoft see happening anyway.... ;-) &lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6733206" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/guyharwood/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://weblogs.asp.net/guyharwood/archive/tags/Dev+Tools/default.aspx">Dev Tools</category><category domain="http://weblogs.asp.net/guyharwood/archive/tags/Subsonic/default.aspx">Subsonic</category><feedburner:origLink>http://weblogs.asp.net/guyharwood/archive/2008/11/13/subsonic-3-0.aspx</feedburner:origLink></item><item><title>ColorPic - nice free tool for developers</title><link>http://feedproxy.google.com/~r/GuyHarwood/~3/ACg8l0Jlxl0/colorpic-nice-free-tool-for-developers.aspx</link><pubDate>Fri, 24 Oct 2008 10:49:10 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6701610</guid><dc:creator>Guy Harwood</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/guyharwood/rsscomments.aspx?PostID=6701610</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guyharwood/commentapi.aspx?PostID=6701610</wfw:comment><comments>http://weblogs.asp.net/guyharwood/archive/2008/10/24/colorpic-nice-free-tool-for-developers.aspx#comments</comments><description>&lt;p&gt;I had to get stuck in to some re-styling of a gridview today and found myself constantly firing up Fireworks and using the Color Palette to tweak the shade and get the hex code (yuck!), after using &lt;a href="http://www.iosart.com/firefox/colorzilla/" target="_blank"&gt;Colorzilla&lt;/a&gt; to extract it from the page i was working on.&lt;/p&gt;  &lt;p&gt;After half an hour of tediousness i found something pretty much straight away via Google (and its free)...&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.iconico.com/colorpic/" target="_blank"&gt;ColorPic from Iconico.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/guyharwood/WindowsLiveWriter/ColorPicnicefreetoolfordevelopers_A5D2/ColorPicSmall_2.gif"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="ColorPicSmall" src="http://weblogs.asp.net/blogs/guyharwood/WindowsLiveWriter/ColorPicnicefreetoolfordevelopers_A5D2/ColorPicSmall_thumb.gif" width="128" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Nice and easy to use and speeds up the job, hope you find it as useful as i did...&lt;/p&gt;  &lt;p&gt;Taken from &lt;a href="http://www.guyharwood.com/post/ColorPic-Excellent-free-tool-for-Designers-and-Developers.aspx" target="_blank"&gt;my personal blog&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6701610" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/guyharwood/archive/tags/Dev+Tools/default.aspx">Dev Tools</category><category domain="http://weblogs.asp.net/guyharwood/archive/tags/Design/default.aspx">Design</category><feedburner:origLink>http://weblogs.asp.net/guyharwood/archive/2008/10/24/colorpic-nice-free-tool-for-developers.aspx</feedburner:origLink></item><item><title>SEO Manager for ASP.NET - manage your meta tag and sitemap generation from one place</title><link>http://feedproxy.google.com/~r/GuyHarwood/~3/ktrG1mIhWAE/seo-manager-for-asp-net-manage-your-meta-tag-and-sitemap-generation-from-one-place.aspx</link><pubDate>Thu, 24 Apr 2008 15:33:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6127293</guid><dc:creator>Guy Harwood</dc:creator><slash:comments>14</slash:comments><wfw:commentRss>http://weblogs.asp.net/guyharwood/rsscomments.aspx?PostID=6127293</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guyharwood/commentapi.aspx?PostID=6127293</wfw:comment><comments>http://weblogs.asp.net/guyharwood/archive/2008/04/24/seo-manager-for-asp-net-manage-your-meta-tag-and-sitemap-generation-from-one-place.aspx#comments</comments><description>
&lt;p&gt;When asp.net 2 arrived i was very pleased to see full support included for accessing the head section of a page programmatically.&amp;nbsp; This meant i could now access and add all the meta tag information dynamically.&amp;nbsp; Recently i started looking into dynamic sitemap generation and picked up a wealth of good tips from &lt;a href="http://www.wrox.com/WileyCDA/WroxTitle/productCd-0470131470.html" mce_href="http://www.wrox.com/WileyCDA/WroxTitle/productCd-0470131470.html"&gt;Cristian Darie and Jaimie Sirovichs' excellent book on SEO for Asp.Net&lt;/a&gt; - including a basic implementation of a sitemap http handler.&amp;nbsp; &lt;/p&gt;
  
&lt;p&gt;&amp;nbsp; &lt;br&gt;I decided to blend the management and generation of the meta tags and sitemap into one set of tools that could be easily implemented into any asp.net site.&lt;/p&gt;
  
&lt;p&gt;&lt;b&gt;Screenshot of pageManager.aspx&lt;/b&gt;&lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/guyharwood/WindowsLiveWriter/ASPMmanageyourmetatagsandsitemapgenerati_86C3/pageManager_2.gif" mce_href="http://weblogs.asp.net/blogs/guyharwood/WindowsLiveWriter/ASPMmanageyourmetatagsandsitemapgenerati_86C3/pageManager_2.gif"&gt;&lt;img src="http://weblogs.asp.net/blogs/guyharwood/WindowsLiveWriter/ASPMmanageyourmetatagsandsitemapgenerati_86C3/pageManager_thumb.gif" style="border-width: 0px;" alt="pageManager.aspx" mce_src="http://weblogs.asp.net/blogs/guyharwood/WindowsLiveWriter/ASPMmanageyourmetatagsandsitemapgenerati_86C3/pageManager_thumb.gif" border="0" width="604" height="269"&gt;&lt;/a&gt; &lt;/p&gt;
  &lt;h3&gt;How it works&lt;/h3&gt;  
&lt;p&gt;PageManager allows you to add meta tags to pages within your site and specify whether or not the page should be included in the sitemap.&amp;nbsp; This is all stored in a sql server database, and the tables can easily be imported into an existing site.&lt;/p&gt;
  
&lt;p&gt;When a page loads it performs a query against tblPage to see if an entry exists for a page with its name (including any paths after the domain name for uniqueness of course).&amp;nbsp; if it does it then proceeds to load any meta tag data into its header, and a custom page title if one is present.&lt;/p&gt;
  
&lt;p&gt;Sitemap.ashx generates an xml sitemap of all the pages from tblPage flagged as 'include in sitemap' via pageManager.aspx.&amp;nbsp; The sitemap is based on the &lt;a href="http://www.sitemaps.org/" mce_href="http://www.sitemaps.org/" target="_blank"&gt;sitemaps.org standard&lt;/a&gt; , but only includes a minimal amount of information (such as page priority).&amp;nbsp; &lt;/p&gt;
  &lt;h4&gt;&lt;b&gt;But most of my pages are data driven - did you think about that?&lt;/b&gt;&lt;/h4&gt;  
&lt;p&gt;Yes, most of mine are too..&lt;/p&gt;
  
&lt;p&gt;The sitemap generator uses reflection to load a custom class that you create, which implements a single method - returning a custom generated list of sitemap entries&lt;/p&gt;
  
&lt;p&gt;&lt;b&gt;For example...&lt;/b&gt;&lt;/p&gt;
  
&lt;p&gt;lets say you have product.aspx (as included in the example project download below) and it accepts a simple parameter that determines which product to display on the page. such as &lt;b&gt;mysite.com/product.aspx?productID=1544&lt;/b&gt;&lt;/p&gt;
  
&lt;p&gt;Simply create a class that implements ICustomPageInfo and implement its only member - GetCustomPageItems() As List(Of SitemapItem)&lt;/p&gt;
  
&lt;p&gt;The purpose of this function is to return a List of sitemapitems for insertion into the generated sitemap instead of 1 parameterless link to product.aspx.&amp;nbsp; So ideally, you would scan the products table, pick out the product pages you want indexed and return those urls as a list of sitemap items.&lt;/p&gt;
  
&lt;p&gt;The only other thing you have to do is specify the fully qualified name of this class you have created in the 'Custom Call' box in pageManager for the page in question and the sitemap handler will append these to the generated sitemap automatically.&lt;/p&gt;
  
&lt;p&gt;For an example of this, see the ProductSitemapInfo class in the example project download below.&lt;/p&gt;
  
&lt;p&gt;I have already set this up in the attached mdf example database.&lt;/p&gt;
  &lt;h4&gt;&lt;b&gt;But what about specific meta tags for these data driven pages?&lt;/b&gt;&lt;/h4&gt;  
&lt;p&gt;I implement these at product level within the system, so the user adding/editing the product would insert a heap of keywords specific to the product in question.&amp;nbsp;&amp;nbsp; When that product is loaded into product.aspx i populate the keywords and description meta tags from the product record in the database, essentially overriding the insertion at basepage level from tag data specified in pageManager.&amp;nbsp; You can easily extend this by creating a 'populate_header' event in the basepage, subscribing to this at page level and inserting your custom keywords/tags right there and then.&amp;nbsp; &lt;/p&gt;
  
&lt;p&gt;This is how i do it in some of the sites i have developed.&lt;/p&gt;
  &lt;h4&gt;&lt;b&gt;But i dont use Query strings in my pages?&lt;/b&gt;&lt;/h4&gt;  
&lt;p&gt;If you understand how this works then surely you can work out the rest yourself :-P&lt;/p&gt;
  &lt;h3&gt;The Contents of the example project&lt;/h3&gt;  
&lt;p&gt;admin/pageManager.aspx - where you set what pages to include in the sitemap and what meta tags to pump into each page you want indexing.&lt;/p&gt;
  
&lt;p&gt;App_Data/pageManager.mdf - the database used as an example (includes the products table from Northwind :-P )&lt;/p&gt;
  
&lt;p&gt;code/basepage.vb - you may have one already - so do i.&amp;nbsp; This just contains the basic hook into the page_load event to populate the necessary meta tag information and title - if found in the database.&lt;/p&gt;
  
&lt;p&gt;code/db.vb - database access code, just to save you the time of rolling your own if you choose to download the demo project and want to run it.&lt;/p&gt;
  
&lt;p&gt;code/ICustomPageInfo.vb - an interface to allow multiple sitemap url generation for data driven pages (explanation below)&lt;/p&gt;
  
&lt;p&gt;code/PageInfo.vb - a helper class for the page data, quite basic but easily extended.&amp;nbsp; I will no doubt rewrite this based around LINQ very soon (time permitting :-S)&lt;/p&gt;
  
&lt;p&gt;code/ProductSitemapInfo.vb - an example implementation of ICustomPageInfo for the product.aspx page &lt;/p&gt;
  
&lt;p&gt;code/siteMapItem.vb - simple helper object that holds sitemap url information&lt;/p&gt;
  
&lt;p&gt;code/util.vb - just some utility functions for generic stuff like web.config access etc...&lt;/p&gt;
  
&lt;p&gt;default.aspx - do i really have to explain this one? :-P&lt;/p&gt;
  
&lt;p&gt;product.aspx - a data driven page that shows an individual product based on the id passed in via query string.&lt;/p&gt;
  
&lt;p&gt;siteMap.ashx - the http handler that returns the xml sitemap.&lt;/p&gt;
  &lt;h3&gt;Its Basic&lt;/h3&gt;  
&lt;p&gt;Yes, there are quite a lot of things that can be done to extend this, some of which i have already done and used in live sites, for example....&lt;/p&gt;
  
&lt;p&gt;Create a specific basepage method that can be overridden to allow extra tags/keywords to be appended/inserted at page level&lt;/p&gt;
  
&lt;p&gt;use LINQ to query the aspx pages that populate the treeview in pageManager.aspx (not really necessary but hey its new!)&lt;/p&gt;
  
&lt;p&gt;Use caching to store specific page tags after first retrieval.&lt;/p&gt;
  
&lt;p&gt;The gridview for adding metatags is pretty mediocre, but serves as an example, ok? :-P&lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p&gt;I hope you find this tool to be beneficial like i have.&amp;nbsp; &lt;/p&gt;
  
&lt;p&gt;The core of it is currently in use on live sites that rank well in their area, and it saves a lot of manual work when we need to modify our keywords and add pages to the sitemap.&lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2fguyharwood%2farchive%2f2008%2f04%2f24%2fseo-manager-for-asp-net-manage-your-meta-tag-and-sitemap-generation-from-one-place.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2fguyharwood%2farchive%2f2008%2f04%2f24%2fseo-manager-for-asp-net-manage-your-meta-tag-and-sitemap-generation-from-one-place.aspx&amp;amp;bgcolor=0099FF" alt="kick it on DotNetKicks.com" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;h4&gt;&lt;b&gt;Download&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;Both versions come with a populated database dumped from SQL Server 2000, and
also a create database script if you want to start from scratch.&amp;nbsp; The
tblProduct table comes directly from Northwind.&amp;nbsp;
  
 &lt;br&gt;&lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://www.mrbaldman.co.uk/files/pagemanager.rar" mce_href="http://www.mrbaldman.co.uk/files/pagemanager.rar" target="_blank"&gt;Vs2008 .Net 3.5 in Visual Basic.NET Download&lt;/a&gt;&lt;br&gt; &lt;/p&gt;
&lt;a href="http://www.mrbaldman.co.uk/files/pagemanagerCS.rar" mce_href="http://www.mrbaldman.co.uk/files/pagemanagerCS.rar" target="_blank"&gt;Vs2008 .Net 3.5 in C# Download &lt;/a&gt;
&lt;p&gt;note - some of the directory parsing code originates from &lt;a href="http://aspnet.4guysfromrolla.com/articles/083006-1.aspx" mce_href="http://aspnet.4guysfromrolla.com/articles/083006-1.aspx" target="_blank"&gt;this post by Scott Mitchell&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6127293" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/guyharwood/archive/tags/meta+tags/default.aspx">meta tags</category><category domain="http://weblogs.asp.net/guyharwood/archive/tags/seo/default.aspx">seo</category><category domain="http://weblogs.asp.net/guyharwood/archive/tags/sitemaps/default.aspx">sitemaps</category><category domain="http://weblogs.asp.net/guyharwood/archive/tags/reflection/default.aspx">reflection</category><feedburner:origLink>http://weblogs.asp.net/guyharwood/archive/2008/04/24/seo-manager-for-asp-net-manage-your-meta-tag-and-sitemap-generation-from-one-place.aspx</feedburner:origLink></item><item><title>Dispose your DataContext After use</title><link>http://feedproxy.google.com/~r/GuyHarwood/~3/46LZIHbXG28/dispose-your-datacontext-after-use.aspx</link><pubDate>Wed, 23 Apr 2008 13:09:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6124086</guid><dc:creator>Guy Harwood</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://weblogs.asp.net/guyharwood/rsscomments.aspx?PostID=6124086</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guyharwood/commentapi.aspx?PostID=6124086</wfw:comment><comments>http://weblogs.asp.net/guyharwood/archive/2008/04/23/dispose-your-datacontext-after-use.aspx#comments</comments><description>
&lt;p&gt;This is my first blog post on here, so Hello from me.&amp;nbsp; &lt;/p&gt;
  
&lt;p&gt;Rather than just have a meaningless 'hello' first post, i thought i would at least post something useful (albeit rather small)..&lt;/p&gt;
  
&lt;p&gt;With all the talk of LINQ at the moment there are a lot of examples popping up on sites and most of them follow this kind of format...&lt;/p&gt;
  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:9f38c03c-f32e-4c74-9759-cff0f5fc48c8" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;
&lt;pre style="overflow: auto; background-color: White;"&gt;&lt;div&gt;&lt;!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;myDbDataContext ctx &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; myDbDataContext(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;connectionString&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br&gt;&lt;br&gt;var query &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; from.... &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;great LINQ example etc...&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;oh, wait, no disposal of my data context?&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;When i first started learning LINQ I was pretty curious as to why most examples do not offer some kind of indication that disposal is required.&amp;nbsp; Maybe because that is exactly what they are - examples.&amp;nbsp; Regardless, i have always disposed my dataContext objects, usually taken care of automatically by wrapping them in a &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2354870&amp;amp;SiteID=1" mce_href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2354870&amp;amp;SiteID=1" target="_blank"&gt;using block&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It is advised on various sites, as pointed out in &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2354870&amp;amp;SiteID=1" mce_href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2354870&amp;amp;SiteID=1" target="_blank"&gt;this MSDN forum post&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;I am currently preparing a rather long post on SEO management for Asp.Net and hope to have that up soon.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/GuyHarwood" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="border: 0pt none ; vertical-align: middle;"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/GuyHarwood" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6124086" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/guyharwood/archive/tags/DataContext/default.aspx">DataContext</category><category domain="http://weblogs.asp.net/guyharwood/archive/tags/Dispose/default.aspx">Dispose</category><category domain="http://weblogs.asp.net/guyharwood/archive/tags/LINQ/default.aspx">LINQ</category><feedburner:origLink>http://weblogs.asp.net/guyharwood/archive/2008/04/23/dispose-your-datacontext-after-use.aspx</feedburner:origLink></item></channel></rss>
