<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Web Dev And Stuff</title><link>http://weblogs.asp.net/johnkatsiotis/default.aspx</link><description>ASP.NET from the G(r)eek side</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Make your site run only in ONE Browser window(single instance)!</title><link>http://weblogs.asp.net/johnkatsiotis/archive/2009/11/15/make-your-site-run-only-in-one-browser-window-single-instance.aspx</link><pubDate>Sun, 15 Nov 2009 10:49:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7255370</guid><dc:creator>djsolid</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/johnkatsiotis/rsscomments.aspx?PostID=7255370</wfw:commentRss><comments>http://weblogs.asp.net/johnkatsiotis/archive/2009/11/15/make-your-site-run-only-in-one-browser-window-single-instance.aspx#comments</comments><description>
&lt;p&gt;While a was at Teched2009 and watching Tim Heuer presenting Silverlight 3 I noticed a new cool feature named Local Messaging! &lt;/p&gt;
  
&lt;p&gt;When I saw this new feature, a crazy idea crossed my mind. Could this be used in order to allow the user to open my website in only one browser window?&lt;/p&gt;
  
&lt;p&gt;The answer is yes! But not the way I first thought. Here is how (code in MainPage.xaml.cs):&lt;/p&gt;
  &lt;div style="border: 1px solid silver; margin: 20px 0px 10px; padding: 4px; overflow: auto; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 97.5%; font-family: 'Courier New',courier,monospace; direction: ltr; max-height: 200px; font-size: 8pt; cursor: text;" id="codeSnippetWrapper"&gt;   
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;" id="codeSnippet"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; _localName = &lt;span style="color: rgb(0, 96, 128);"&gt;"SL App"&lt;/span&gt;;&lt;br&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;bool&lt;/span&gt; _Close = &lt;span style="color: rgb(0, 0, 255);"&gt;false&lt;/span&gt;;&lt;br&gt;&lt;br&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; MainPage()&lt;br&gt;{&lt;br&gt;   InitializeComponent();&lt;br&gt;&lt;br&gt;   Loaded += &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; RoutedEventHandler(MainPage_Loaded);&lt;br&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;try&lt;/span&gt;&lt;br&gt;   {&lt;br&gt;       LocalMessageReceiver incomingMessage = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; LocalMessageReceiver(_localName);&lt;br&gt;       &lt;span style="color: rgb(0, 128, 0);"&gt;//Start listening&lt;/span&gt;&lt;br&gt;       incomingMessage.Listen();&lt;br&gt;   }&lt;br&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;catch&lt;/span&gt; (ListenFailedException)&lt;br&gt;   {&lt;br&gt;       _Close = &lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;;&lt;br&gt;   }            &lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;protected&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt; MainPage_Loaded(&lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&lt;br&gt;{&lt;br&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (_Close)&lt;br&gt;   {&lt;br&gt;       HtmlPage.Window.SetProperty(&lt;span style="color: rgb(0, 96, 128);"&gt;"location"&lt;/span&gt;, &lt;span style="color: rgb(0, 96, 128);"&gt;"/InfoMessage.aspx"&lt;/span&gt;);&lt;br&gt;   }&lt;br&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;&lt;br&gt;   {&lt;br&gt;       LocalMessageSender msgSender = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; LocalMessageSender(_localName);&lt;br&gt;       msgSender.SendAsync(&lt;span style="color: rgb(0, 96, 128);"&gt;"New instance loaded"&lt;/span&gt;);&lt;br&gt;   }&lt;br&gt;}&lt;/pre&gt;
  &lt;br&gt;&lt;/div&gt;

&lt;p&gt;Loading Default.aspx&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/johnkatsiotis/image_401E0BA8.png" mce_href="http://weblogs.asp.net/blogs/johnkatsiotis/image_401E0BA8.png"&gt;&lt;img src="http://weblogs.asp.net/blogs/johnkatsiotis/image_thumb_0960B0A4.png" style="border-width: 0px; display: inline;" title="image" alt="image" mce_src="http://weblogs.asp.net/blogs/johnkatsiotis/image_thumb_0960B0A4.png" border="0" height="255" width="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clicking on the first link 
  &lt;br&gt;&lt;a href="http://weblogs.asp.net/blogs/johnkatsiotis/image_75671E0D.png" mce_href="http://weblogs.asp.net/blogs/johnkatsiotis/image_75671E0D.png"&gt;&lt;img src="http://weblogs.asp.net/blogs/johnkatsiotis/image_thumb_539B457C.png" style="border-width: 0px; display: inline;" title="image" alt="image" mce_src="http://weblogs.asp.net/blogs/johnkatsiotis/image_thumb_539B457C.png" border="0" height="297" width="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Then on the second link&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/johnkatsiotis/image_1CDDEA78.png" mce_href="http://weblogs.asp.net/blogs/johnkatsiotis/image_1CDDEA78.png"&gt;&lt;img src="http://weblogs.asp.net/blogs/johnkatsiotis/image_thumb_5AF70529.png" style="border-width: 0px; display: inline;" title="image" alt="image" mce_src="http://weblogs.asp.net/blogs/johnkatsiotis/image_thumb_5AF70529.png" border="0" height="281" width="523"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Those are the files in the solution&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/johnkatsiotis/image_5FF942D8.png" mce_href="http://weblogs.asp.net/blogs/johnkatsiotis/image_5FF942D8.png"&gt;&lt;img src="http://weblogs.asp.net/blogs/johnkatsiotis/image_thumb_175F5407.png" style="border-width: 0px; display: inline;" title="image" alt="image" mce_src="http://weblogs.asp.net/blogs/johnkatsiotis/image_thumb_175F5407.png" border="0" height="294" width="294"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;That’s an exception driven solution but works for me! :) &lt;/p&gt;

&lt;p&gt;This works also across different browsers but if you want you can changed to allow one instance per browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://john.katsiotis.com/samples/SingletonWebAppManager.zip" mce_href="http://john.katsiotis.com/samples/SingletonWebAppManager.zip"&gt;Here are the solution files.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2009%2f11%2f14%2fmake-your-site-run-only-in-one-browser-window-single-instance.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2009%2f11%2f14%2fmake-your-site-run-only-in-one-browser-window-single-instance.aspx&amp;amp;fgcolor=000000&amp;amp;bgcolor=CCFF00&amp;amp;cfgcolor=333333" alt="kick it on DotNetKicks.com" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7255370" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Web+Development/default.aspx">Web Development</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>ASP.NET Membership - Change password without asking the old</title><link>http://weblogs.asp.net/johnkatsiotis/archive/2009/09/28/asp-net-membership-change-password-without-asking-the-old.aspx</link><pubDate>Mon, 28 Sep 2009 03:25:26 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7218803</guid><dc:creator>djsolid</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/johnkatsiotis/rsscomments.aspx?PostID=7218803</wfw:commentRss><comments>http://weblogs.asp.net/johnkatsiotis/archive/2009/09/28/asp-net-membership-change-password-without-asking-the-old.aspx#comments</comments><description>&lt;p&gt;Recently I was in a situation where a user was required to change the password upon first login.&lt;/p&gt;  &lt;p&gt;But MembershipUser’s ChangePassword requires 2 arguments. Old and new password. In my case &lt;strong&gt;the password was hashed&lt;/strong&gt; and I couldn’t retrieve it unless the user enter it.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/johnkatsiotis/changepass_12B74348.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="changepass" border="0" alt="changepass" src="http://weblogs.asp.net/blogs/johnkatsiotis/changepass_thumb_3F5FFD21.gif" width="452" height="102" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So I wanted to change the password without asking the old one. The solution was :&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/johnkatsiotis/image_3E1B6442.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/johnkatsiotis/image_thumb_4F1F9225.png" width="427" height="50" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Reset the password &lt;/li&gt;    &lt;li&gt;Keep the generated password in a var &lt;/li&gt;    &lt;li&gt;Call MembershipUser.ChangePassword using the generated password as the old one! &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;It does an extra query to the database but does the job! If the password was stored in Clear or Encrypted form it could be retrieved.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7218803" width="1" height="1"&gt;</description></item><item><title>Anonymous user access in N2 CMS</title><link>http://weblogs.asp.net/johnkatsiotis/archive/2009/04/14/anonymous-user-access-in-n2-cms.aspx</link><pubDate>Tue, 14 Apr 2009 01:31:19 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7045613</guid><dc:creator>djsolid</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/johnkatsiotis/rsscomments.aspx?PostID=7045613</wfw:commentRss><comments>http://weblogs.asp.net/johnkatsiotis/archive/2009/04/14/anonymous-user-access-in-n2-cms.aspx#comments</comments><description>&lt;h2&gt;N2 CMS&lt;/h2&gt;  &lt;p&gt;First of all i have to say that &lt;a href="http://n2cms.com/" target="_blank"&gt;N2 CMS&lt;/a&gt; i a great Content Management System and really extensible! I discovered it a while ago and i decided to re-develop projects that were built with DotNetNuke with N2.&lt;/p&gt;  &lt;h2&gt;What do i want?&lt;/h2&gt;  &lt;p&gt;I want to show a page or a content &lt;strong&gt;&lt;u&gt;only&lt;/u&gt;&lt;/strong&gt; to anonymous users. I am using the default ASP.NET Role Provider for Sql Server.&lt;/p&gt;  &lt;h2&gt;Implementation &lt;/h2&gt;  &lt;p&gt;So first of all i had to extend that provider. This is how :&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MyCustomSqlRoleProvider : System.Web.Security.SqlRoleProvider&lt;/pre&gt;

    &lt;pre&gt;{&lt;/pre&gt;

    &lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AddUsersToRoles(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] usernames, &lt;span class="kwrd"&gt;string&lt;/span&gt;[] roleNames)&lt;/pre&gt;

    &lt;pre&gt;    {&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (roleNames.Any(x =&amp;gt; x == &lt;span class="str"&gt;&amp;quot;Anonymous&amp;quot;&lt;/span&gt;))&lt;/pre&gt;

    &lt;pre&gt;            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; InvalidOperationException(&lt;span class="str"&gt;&amp;quot;Cannot add \&amp;quot;Anonymous\&amp;quot; role&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="str"&gt; to user(s). Role is automaticaly assigned.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;base&lt;/span&gt;.AddUsersToRoles(usernames, roleNames);&lt;/pre&gt;

    &lt;pre&gt;    }&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[] GetAllRoles()&lt;/pre&gt;

    &lt;pre class="alt"&gt;    {&lt;/pre&gt;

    &lt;pre&gt;        List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; roles = &lt;span class="kwrd"&gt;base&lt;/span&gt;.GetAllRoles().ToList();&lt;/pre&gt;

    &lt;pre class="alt"&gt;        roles.Add(&lt;span class="str"&gt;&amp;quot;Anonymous&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; roles.ToArray();&lt;/pre&gt;

    &lt;pre class="alt"&gt;    }&lt;/pre&gt;

    &lt;pre&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsUserInRole(&lt;span class="kwrd"&gt;string&lt;/span&gt; username, &lt;span class="kwrd"&gt;string&lt;/span&gt; roleName)&lt;/pre&gt;

    &lt;pre class="alt"&gt;    {&lt;/pre&gt;

    &lt;pre&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (HttpContext.Current != null &amp;amp;&amp;amp; &lt;/pre&gt;

    &lt;pre&gt;                   !HttpContext.Current.User.Identity.IsAuthenticated &amp;amp;&amp;amp; &lt;/pre&gt;

    &lt;pre&gt;                   HttpContext.Current.User.Identity.Name == username)&lt;/pre&gt;

    &lt;pre class="alt"&gt;        {&lt;/pre&gt;

    &lt;pre&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; roleName == &lt;span class="str"&gt;&amp;quot;Anonymous&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre class="alt"&gt;        }&lt;/pre&gt;

    &lt;pre&gt;        &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;base&lt;/span&gt;.IsUserInRole(username, roleName);&lt;/pre&gt;

    &lt;pre&gt;    }&lt;/pre&gt;

    &lt;pre class="alt"&gt;}&lt;/pre&gt;
  &lt;/div&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;div class="csharpcode"&gt;&amp;#160;&lt;/div&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;/div&gt;

&lt;p&gt;Nothing fancy here. Just adding the Anonymous Role and checking if user is not logged in and the role being checked is “Anoynoumous” to return true. Also i try to ensure that no one will try to add the '”Anonoymous” role to a registered user.&lt;/p&gt;

&lt;p&gt;Next i had to implement an ISecurityManager to do the Authorization. This is how : &lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MyCustomSecurityManager : N2.Security.SecurityManager&lt;/pre&gt;

  &lt;pre&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; MyCustomSecurityManager(IWebContext webContext) : &lt;span class="kwrd"&gt;base&lt;/span&gt;(webContext) { }&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;p&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; MyCustomSecurityManager(IWebContext webContext, &lt;/p&gt;&lt;p&gt;          N2.Configuration.EditSection config) : &lt;span class="kwrd"&gt;base&lt;/span&gt;(webContext, config) { }&lt;/p&gt;&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsAuthorized(ContentItem item, IPrincipal principal)&lt;/pre&gt;

  &lt;pre&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;bool&lt;/span&gt; isAuthorized = &lt;span class="kwrd"&gt;base&lt;/span&gt;.IsAuthorized(item, principal);&lt;/pre&gt;

  &lt;pre&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!isAuthorized &amp;amp;&amp;amp; !principal.Identity.IsAuthenticated &amp;amp;&amp;amp; &lt;/pre&gt;

  &lt;pre&gt;                      item.AuthorizedRoles.Count &amp;gt; 0)&lt;/pre&gt;

  &lt;pre class="alt"&gt;        {&lt;/pre&gt;

  &lt;pre&gt;            isAuthorized = item.AuthorizedRoles.Any(x =&amp;gt; x.Role == &amp;quot;Anonymous&amp;quot;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;        }&lt;/pre&gt;

  &lt;pre&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; isAuthorized;&lt;/pre&gt;

  &lt;pre class="alt"&gt;    }&lt;/pre&gt;

  &lt;pre&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&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;/p&gt;

&lt;p&gt;Inheriting from N2.Security.SecurityManager i had to override only the IsAuthorized method to work the way i intended to. &lt;/p&gt;

&lt;p&gt;And last but not least i had to add to the web.config the following&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;n2&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;engine&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;components&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;

    &lt;pre&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;service&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;N2.Security.ISecurityManager, N2&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;     &lt;span class="attr"&gt;implementation&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;MyCustomSecurityManager, AssemblyName&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;components&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;

    &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;engine&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;n2&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&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;/div&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;h2&gt;Conclusion &lt;/h2&gt;

&lt;p&gt;I hope to find this post useful. If you have any suggestions or questions please let me know. And i case you haven’t checked &lt;a href="http://n2cms.com/" target="_blank"&gt;N2 CMS&lt;/a&gt; just take a &lt;a href="http://n2cms.com/screenshots.aspx" target="_blank"&gt;quick look&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2009%2f04%2f14%2fanonymous-user-access-in-n2-cms.aspx"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2009%2f04%2f14%2fanonymous-user-access-in-n2-cms.aspx&amp;amp;fgcolor=000000&amp;amp;bgcolor=CCFF00&amp;amp;cfgcolor=333333" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7045613" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Web+Development/default.aspx">Web Development</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/N2+CMS/default.aspx">N2 CMS</category></item><item><title>LiteralControl in Markup!!!</title><link>http://weblogs.asp.net/johnkatsiotis/archive/2008/10/19/literalcontrol-in-markup.aspx</link><pubDate>Sun, 19 Oct 2008 10:25:24 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6690005</guid><dc:creator>djsolid</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/johnkatsiotis/rsscomments.aspx?PostID=6690005</wfw:commentRss><comments>http://weblogs.asp.net/johnkatsiotis/archive/2008/10/19/literalcontrol-in-markup.aspx#comments</comments><description>&lt;p&gt;I always had the question if I could add a LiteralControl via Markup code. Let's say something like that : &lt;/p&gt;  &lt;pre&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;header&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #c71585"&gt;asp&lt;/span&gt;:&lt;span style="color: #800000"&gt;LiteralControl&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;ltrHeader&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #c71585"&gt;asp&lt;/span&gt;:&lt;span style="color: #800000"&gt;LiteralControl&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;sub-header&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #c71585"&gt;asp&lt;/span&gt;:&lt;span style="color: #800000"&gt;LiteralControl&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;ltrSubHeader&amp;quot; &lt;span style="color: #ff0000"&gt;Text&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Some Text&amp;quot; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #c71585"&gt;asp&lt;/span&gt;:&lt;span style="color: #800000"&gt;LiteralControl&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Well It IS possible and simple to be honest. Just Register the control at the top of the page like that : &lt;/p&gt;

&lt;pre&gt;&lt;span style="background-color: #ffff00; color: black"&gt;&amp;lt;%@ Register Assembly=&amp;quot;System.Web&amp;quot; Namespace=&amp;quot;System.Web.UI&amp;quot; TagPrefix=&amp;quot;asp&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;You might have a warning that &amp;quot;Element 'LiteralControl' is not a known element.&amp;quot; but it will compile just fine and you can set the Text programmatically!&lt;/p&gt;

&lt;p&gt;Hope that helps anyone who wants to use a LiteralControl over Literal! &lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6690005" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Web+Development/default.aspx">Web Development</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/LiteralControl/default.aspx">LiteralControl</category></item><item><title>.NET Framework 4.0 and “Dublin”</title><link>http://weblogs.asp.net/johnkatsiotis/archive/2008/10/01/net-framework-4-0-and-dublin.aspx</link><pubDate>Wed, 01 Oct 2008 17:07:18 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6650370</guid><dc:creator>djsolid</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/johnkatsiotis/rsscomments.aspx?PostID=6650370</wfw:commentRss><comments>http://weblogs.asp.net/johnkatsiotis/archive/2008/10/01/net-framework-4-0-and-dublin.aspx#comments</comments><description>&lt;p&gt;How about a sneak peek&amp;#160; into the .NET Framework 4.0?&lt;/p&gt;  &lt;p&gt;At Steven Martin's &lt;a target="_blank" href="http://blogs.msdn.com/stevemar/archive/2008/10/01/the-road-to-pdc-net-framework-4-0-and-dublin.aspx"&gt;blog&lt;/a&gt; you can see about&amp;#160; WCF &amp;#954;&amp;#945;&amp;#953; WF improvements, Dublin etc...&lt;/p&gt;  &lt;p&gt;More to come of course at PDC..&lt;/p&gt;  &lt;p&gt;Yeaaaaah...!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6650370" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/News/default.aspx">News</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/.NET+4.0/default.aspx">.NET 4.0</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Dublin/default.aspx">Dublin</category></item><item><title>Silverlight and Shoutcast!</title><link>http://weblogs.asp.net/johnkatsiotis/archive/2008/10/01/silverlight-and-shoutcast.aspx</link><pubDate>Wed, 01 Oct 2008 12:26:52 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6650069</guid><dc:creator>djsolid</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/johnkatsiotis/rsscomments.aspx?PostID=6650069</wfw:commentRss><comments>http://weblogs.asp.net/johnkatsiotis/archive/2008/10/01/silverlight-and-shoutcast.aspx#comments</comments><description>&lt;p&gt;Finally a solution!!!!!!!! How can we stream a shoutcast radio via a Silverlight application?&lt;/p&gt;  &lt;p&gt;Well in 6 steps...&lt;/p&gt;  &lt;p&gt;1. Open Expression Blend&lt;/p&gt;  &lt;p&gt;2. Create a Project&lt;/p&gt;  &lt;p&gt;3. Add a media element&lt;/p&gt;  &lt;p&gt;4. Add the code below at the cs (or vb) file&lt;/p&gt;  &lt;pre&gt;&lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; Page()&lt;br /&gt;{&lt;br /&gt;	&lt;span style="color: rgb(0,128,0)"&gt;// Required to initialize variables&lt;/span&gt;&lt;br /&gt;	InitializeComponent();&lt;br /&gt;	&lt;span style="color: rgb(0,0,255)"&gt;this&lt;/span&gt;.Loaded += &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; RoutedEventHandler(Page_Loaded);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Page_Loaded(&lt;span style="color: rgb(0,0,255)"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&lt;br /&gt;{&lt;br /&gt;	&lt;span style="color: rgb(0,0,255)"&gt;try&lt;/span&gt;&lt;br /&gt;      {&lt;br /&gt;      &lt;br /&gt;      myElem.Source = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; Uri(&amp;quot;http&lt;span style="color: rgb(139,0,0)"&gt;://mystation:port/;&lt;/span&gt;&amp;quot;);&lt;br /&gt;      myElem.Play();&lt;br /&gt;      }&lt;br /&gt;      &lt;span style="color: rgb(0,0,255)"&gt;catch&lt;/span&gt; (Exception ex)&lt;br /&gt;      {&lt;br /&gt;      &lt;br /&gt;	}&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;5. We put &lt;strike&gt;mms instead of http and&lt;/strike&gt; at the end &amp;quot;/;&amp;quot; without the quotes&lt;/p&gt;

&lt;p&gt;6. We hit F5 and listen our radio!!!&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Edit :&lt;/u&gt; &lt;/strong&gt;it works with http really good but i never tried until now... So no need for mms at the beginning of the URL.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6650069" width="1" height="1"&gt;</description></item><item><title>Set default value for Properties</title><link>http://weblogs.asp.net/johnkatsiotis/archive/2008/09/18/set-default-value-for-properties.aspx</link><pubDate>Thu, 18 Sep 2008 09:25:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6631655</guid><dc:creator>djsolid</dc:creator><slash:comments>15</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/johnkatsiotis/rsscomments.aspx?PostID=6631655</wfw:commentRss><comments>http://weblogs.asp.net/johnkatsiotis/archive/2008/09/18/set-default-value-for-properties.aspx#comments</comments><description>&lt;p&gt;Many times I needed to set a default value for a property.&lt;/p&gt;  &lt;p&gt;For example at the property below&lt;/p&gt;  &lt;p&gt;public string Property1 {get; set;}&lt;/p&gt;  &lt;p&gt;I wanted a default value "Value1". The only way was to create a private field or to set it in code like Property1 = "Value1" somewhere.&lt;/p&gt;  &lt;p&gt;What if I wanted to do this for all my properties ?&lt;/p&gt;  &lt;p&gt;For this case i decided to create a custom attribute which does that thing. Takes a value and if the value of the current property is null sets it to the given value.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;To be more specific let's begin with the custom attribute class:&lt;/p&gt;  &lt;pre style="overflow: auto;"&gt; [global::System.AttributeUsage(AttributeTargets.Property, Inherited = &lt;span style="color: rgb(0, 0, 255);"&gt;false&lt;/span&gt;, AllowMultiple = &lt;span style="color: rgb(0, 0, 255);"&gt;false&lt;/span&gt;)]&lt;br&gt;    &lt;span style="color: rgb(0, 0, 255);"&gt;sealed&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt; DefaultValueAttribute : Attribute&lt;br&gt;    {&lt;br&gt;        &lt;span style="color: rgb(0, 0, 255);"&gt;readonly&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt; defaultValue;&lt;br&gt;        &lt;span style="color: rgb(0, 0, 255);"&gt;readonly&lt;/span&gt; Type valueType;&lt;br&gt;&lt;br&gt;        &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; DefaultValueAttribute(&lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt; defaultValue, Type valueType)&lt;br&gt;        {&lt;br&gt;            &lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;.valueType = valueType;&lt;br&gt;            &lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;.defaultValue = Convert.ChangeType(defaultValue, valueType);&lt;br&gt;        }&lt;br&gt;        &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; Type ValueType { &lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt; { &lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; valueType; } }&lt;br&gt;        &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt; DefaultValue&lt;br&gt;        {&lt;br&gt;            &lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt; { &lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; defaultValue; }&lt;br&gt;        }&lt;br&gt;    }&lt;/pre&gt;

&lt;p&gt;Then we have a helper class with an extension method : &lt;/p&gt;

&lt;pre style="overflow: auto;"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt; DefaultValueAttributeHelper&lt;br&gt;    {&lt;br&gt;        &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt; SetDefaultValues(&lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt; obj)&lt;br&gt;        {&lt;br&gt;            Type t = obj.GetType();&lt;br&gt;            &lt;span style="color: rgb(0, 0, 255);"&gt;foreach&lt;/span&gt; (var item &lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt; t.GetProperties())&lt;br&gt;            {&lt;br&gt;                &lt;span style="color: rgb(0, 0, 255);"&gt;foreach&lt;/span&gt; (var attr &lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt; item.GetCustomAttributes(&lt;span style="color: rgb(0, 0, 255);"&gt;typeof&lt;/span&gt;(DefaultValueAttribute), &lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;))&lt;br&gt;                {&lt;br&gt;                    DefaultValueAttribute val = ((DefaultValueAttribute)attr);&lt;br&gt;                    &lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (item.GetValue(obj, &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;) == &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt; ||&lt;br&gt;                        ((item.GetValue(obj, &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;).ToString() == "&lt;span style="color: rgb(139, 0, 0);"&gt;0&lt;/span&gt;") &amp;amp;&amp;amp; &lt;br&gt;                                       (val.ValueType != &lt;span style="color: rgb(0, 0, 255);"&gt;typeof&lt;/span&gt;(&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;))))&lt;br&gt;                        item.SetValue(obj, val.DefaultValue, &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;);&lt;br&gt;                }&lt;br&gt;            }&lt;br&gt;&lt;br&gt;        }&lt;br&gt;    }&lt;/pre&gt;

&lt;p&gt;And finally how this can be used&amp;nbsp; for example at an ASP.NET Page: &lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;pre style="overflow: auto;"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; partial &lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt; UserDetails : System.Web.UI.Page&lt;br&gt;    {&lt;br&gt;        &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; UserDetails()&lt;br&gt;        {&lt;br&gt;            &lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;.SetDefaultValues();&lt;br&gt;        }&lt;br&gt;        &lt;span style="color: rgb(0, 0, 255);"&gt;protected&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br&gt;        {&lt;br&gt;            Response.Write(StringProp + "&lt;span style="color: rgb(139, 0, 0);"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;" + IntProp + "&lt;span style="color: rgb(139, 0, 0);"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;" + (DoubleProp + 1));&lt;br&gt;        }&lt;br&gt;&lt;br&gt;        [DefaultValueAttribute("&lt;span style="color: rgb(139, 0, 0);"&gt;6.11354&lt;/span&gt;", &lt;span style="color: rgb(0, 0, 255);"&gt;typeof&lt;/span&gt;(&lt;span style="color: rgb(0, 0, 255);"&gt;double&lt;/span&gt;))]&lt;br&gt;        &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;double&lt;/span&gt; DoubleProp { &lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;; &lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;; }&lt;br&gt;&lt;br&gt;        [DefaultValueAttribute("&lt;span style="color: rgb(139, 0, 0);"&gt;6&lt;/span&gt;", &lt;span style="color: rgb(0, 0, 255);"&gt;typeof&lt;/span&gt;(&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;))]&lt;br&gt;        &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; IntProp { &lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;; &lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;; }&lt;br&gt;&lt;br&gt;        [DefaultValueAttribute("&lt;span style="color: rgb(139, 0, 0);"&gt;String1&lt;/span&gt;", &lt;span style="color: rgb(0, 0, 255);"&gt;typeof&lt;/span&gt;(&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;))]&lt;br&gt;        &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; StringProp { &lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;; &lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;; }&lt;br&gt;&lt;br&gt;&lt;br&gt;    }&lt;/pre&gt;

&lt;p&gt;Well that's all ... This is really simple. Next step is to create an interface so the above attirbute can be used with custom objects.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;If anyone has any improvements please let me know! &lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2008%2f09%2f18%2fset-default-value-for-properties.aspx" mce_href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2008%2f09%2f18%2fset-default-value-for-properties.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2008%2f09%2f18%2fset-default-value-for-properties.aspx&amp;amp;fgcolor=000000&amp;amp;bgcolor=CCFF00&amp;amp;cfgcolor=333333" mce_src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2008%2f09%2f18%2fset-default-value-for-properties.aspx&amp;amp;fgcolor=000000&amp;amp;bgcolor=CCFF00&amp;amp;cfgcolor=333333" alt="kick it on DotNetKicks.com" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6631655" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Custom+Attribute/default.aspx">Custom Attribute</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Property/default.aspx">Property</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Reflection/default.aspx">Reflection</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Default+Value/default.aspx">Default Value</category></item><item><title>ASP.NET Messagebox - Server and Client</title><link>http://weblogs.asp.net/johnkatsiotis/archive/2008/09/14/asp-net-messagebox-server-and-client.aspx</link><pubDate>Sun, 14 Sep 2008 10:15:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6624513</guid><dc:creator>djsolid</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/johnkatsiotis/rsscomments.aspx?PostID=6624513</wfw:commentRss><comments>http://weblogs.asp.net/johnkatsiotis/archive/2008/09/14/asp-net-messagebox-server-and-client.aspx#comments</comments><description>&lt;p&gt;Today I ran into an excellent post of &lt;a href="http://beckelman.net/" mce_href="http://beckelman.net/"&gt;Bill Beckelman&lt;/a&gt; about a server side asp.net message box.&lt;/p&gt;  &lt;p&gt;More info you can find on &lt;a href="http://beckelman.net/post/2008/07/15/ASPNET-Popup-Message-Box-User-Control.aspx" target="_blank" mce_href="http://beckelman.net/post/2008/07/15/ASPNET-Popup-Message-Box-User-Control.aspx"&gt;this post&lt;/a&gt;. And I thought what if I wanted to use it via the client ? So I decided to extended a little further and to add a client-side behavior.&lt;/p&gt;  &lt;h1&gt;&amp;nbsp;&lt;/h1&gt;  &lt;h1&gt;How can be used via the client?&lt;/h1&gt;  &lt;p&gt;To use the MessageBox via client you should call the    &lt;br&gt;&lt;b&gt;ShowMessageBox(type,Header,Text,Width,Height) function.&lt;/b&gt;     &lt;br&gt;&lt;/p&gt;  &lt;p&gt;The first argument is the type. At the moment possible values are &lt;b&gt;&lt;u&gt;info,error,success and warning&lt;/u&gt;&lt;/b&gt;.     &lt;br&gt;The second is the the header of the messagebox and the third is the text. You can also use html...!     &lt;br&gt;The other two are width and height of the message box.     &lt;br&gt;&lt;/p&gt; &lt;b&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;Example : ShowMessageBox('info','A Simple Header','Just &lt;b&gt;some&lt;/b&gt; text',400,125);&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;So simple :)&lt;/p&gt;  &lt;p&gt;You can view a &lt;a href="http://samples-john.katsiotis.com/muc/" target="_blank" mce_href="http://samples-john.katsiotis.com/muc/"&gt;demo&lt;/a&gt; or you can &lt;a href="http://samples-john.katsiotis.com/muc/MessageBoxUserControl.rar" target="_blank" mce_href="http://samples-john.katsiotis.com/muc/MessageBoxUserControl.rar"&gt;download&lt;/a&gt; the updated version.&lt;/p&gt;  &lt;p&gt;Again credits to &lt;a href="http://beckelman.net/" mce_href="http://beckelman.net/"&gt;Bill Beckelman&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;Screenshots&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/ASP.NETMessageboxServerandClient_BA39/image.axd_2.png" mce_href="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/ASP.NETMessageboxServerandClient_BA39/image.axd_2.png"&gt;&lt;img src="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/ASP.NETMessageboxServerandClient_BA39/image.axd_thumb.png" style="border-width: 0px;" alt="image.axd" mce_src="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/ASP.NETMessageboxServerandClient_BA39/image.axd_thumb.png" border="0" width="291" height="130"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/ASP.NETMessageboxServerandClient_BA39/image1.axd_2.png" mce_href="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/ASP.NETMessageboxServerandClient_BA39/image1.axd_2.png"&gt;&lt;img src="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/ASP.NETMessageboxServerandClient_BA39/image1.axd_thumb.png" style="border-width: 0px;" alt="image1.axd" mce_src="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/ASP.NETMessageboxServerandClient_BA39/image1.axd_thumb.png" border="0" width="291" height="131"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/ASP.NETMessageboxServerandClient_BA39/image2.axd_2.png" mce_href="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/ASP.NETMessageboxServerandClient_BA39/image2.axd_2.png"&gt;&lt;img src="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/ASP.NETMessageboxServerandClient_BA39/image2.axd_thumb.png" style="border-width: 0px;" alt="image2.axd" mce_src="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/ASP.NETMessageboxServerandClient_BA39/image2.axd_thumb.png" border="0" width="290" height="130"&gt;&lt;/a&gt;&amp;nbsp; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2008%2f09%2f14%2fasp-net-messagebox-server-and-client.aspx" mce_href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2008%2f09%2f14%2fasp-net-messagebox-server-and-client.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2008%2f09%2f14%2fasp-net-messagebox-server-and-client.aspx&amp;amp;fgcolor=000000&amp;amp;bgcolor=CCFF00&amp;amp;cfgcolor=333333" alt="kick it on DotNetKicks.com" mce_src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2008%2f09%2f14%2fasp-net-messagebox-server-and-client.aspx&amp;amp;fgcolor=000000&amp;amp;bgcolor=CCFF00&amp;amp;cfgcolor=333333" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6624513" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Web+Development/default.aspx">Web Development</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Modal/default.aspx">Modal</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/AjaxTookit/default.aspx">AjaxTookit</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/MessageBox/default.aspx">MessageBox</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Client+Side/default.aspx">Client Side</category></item><item><title>Firebug 1.2 - New Version</title><link>http://weblogs.asp.net/johnkatsiotis/archive/2008/08/26/firebug-1-2-new-version.aspx</link><pubDate>Mon, 25 Aug 2008 22:28:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6565002</guid><dc:creator>djsolid</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/johnkatsiotis/rsscomments.aspx?PostID=6565002</wfw:commentRss><comments>http://weblogs.asp.net/johnkatsiotis/archive/2008/08/26/firebug-1-2-new-version.aspx#comments</comments><description>&lt;p&gt;Just a few hours ago the 1.2 version of the ultimate web development tool, Firebug , has been released. Several improvements and bug fixes come with this release. You can find more at &lt;a href="http://ejohn.org/blog/firebug-12-released/" title="Link που εξηγεί αναλυτικότερα τι περιέχει αυτή η νέα έκδοση" mce_href="http://ejohn.org/blog/firebug-12-released/" target="_blank"&gt;John's&lt;/a&gt; post.&lt;/p&gt;  &lt;p&gt;Update NOW!!!!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6565002" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Web+Development/default.aspx">Web Development</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Firebug/default.aspx">Firebug</category></item><item><title>The @Reference Directive</title><link>http://weblogs.asp.net/johnkatsiotis/archive/2008/08/13/the-reference-directive.aspx</link><pubDate>Wed, 13 Aug 2008 10:01:53 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6512123</guid><dc:creator>djsolid</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/johnkatsiotis/rsscomments.aspx?PostID=6512123</wfw:commentRss><comments>http://weblogs.asp.net/johnkatsiotis/archive/2008/08/13/the-reference-directive.aspx#comments</comments><description>&lt;p&gt;When I want to add a user control to a page I use the @Register directive at the top of the page. and the I add the control to the markup. But what if I want to add a user control programmatically but I have no reference of it via the markup? That is where the @Reference directive comes to action. &lt;/p&gt;  &lt;p&gt;What's the story?&lt;/p&gt;  &lt;p&gt;We have a user control with the name myUserControl.aspx&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/TheReferenceDirective_B729/1.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="196" alt="1" src="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/TheReferenceDirective_B729/1_thumb.jpg" width="217" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;We add at the top of the page the control we want to programmatically add like this...&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/TheReferenceDirective_B729/2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="304" alt="2" src="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/TheReferenceDirective_B729/2_thumb.jpg" width="538" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And finally the controls is being added to the page like this...&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/TheReferenceDirective_B729/3.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="140" alt="3" src="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/TheReferenceDirective_B729/3_thumb.jpg" width="549" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In general, when we declare a control in the page layout we use @Register and when we create the control programmatically we use @Reference.&lt;/p&gt;  &lt;p&gt;That's it ... &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2008%2f08%2f13%2fthe-reference-directive.aspx"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2008%2f08%2f13%2fthe-reference-directive.aspx&amp;amp;fgcolor=000000&amp;amp;bgcolor=CCFF00&amp;amp;cfgcolor=333333" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6512123" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Web+Development/default.aspx">Web Development</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Tips+n+tricks/default.aspx">Tips n tricks</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Directives/default.aspx">Directives</category></item><item><title>ASP.NET Browsers Filter!!</title><link>http://weblogs.asp.net/johnkatsiotis/archive/2008/08/12/asp-net-browsers-filter.aspx</link><pubDate>Tue, 12 Aug 2008 06:49:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6507186</guid><dc:creator>djsolid</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/johnkatsiotis/rsscomments.aspx?PostID=6507186</wfw:commentRss><comments>http://weblogs.asp.net/johnkatsiotis/archive/2008/08/12/asp-net-browsers-filter.aspx#comments</comments><description>
&lt;p&gt;Yesterday .NET SP1 released and many new features for ASP.NET where added. But yesterday i also discovered a feature that ASP.NET has from version 2.0&lt;/p&gt;
  
&lt;p&gt;Let's say we have a button. We can decide what value will the properties have for different browsers!!! And we can do that with this way...&lt;/p&gt;
  
&lt;pre&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(199, 21, 133);"&gt;asp&lt;/span&gt;:&lt;span style="color: rgb(128, 0, 0);"&gt;Button&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;ie&lt;/span&gt;:&lt;span style="color: rgb(255, 0, 0);"&gt;Text&lt;/span&gt;=&lt;span style="color: rgb(0, 0, 255);"&gt;"IEText"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;runat&lt;/span&gt;=&lt;span style="color: rgb(0, 0, 255);"&gt;"server"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;mozilla&lt;/span&gt;:&lt;span style="color: rgb(255, 0, 0);"&gt;Text&lt;/span&gt;=&lt;span style="color: rgb(0, 0, 255);"&gt;"FFText"&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;The result in IE will be a button with IEText and in Firefox FFText.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/ASP.NETBrowsersFilter_8A15/Capture_2.jpg" mce_href="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/ASP.NETBrowsersFilter_8A15/Capture_2.jpg"&gt;&lt;img src="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/ASP.NETBrowsersFilter_8A15/Capture_thumb.jpg" style="border: 0px none ;" alt="Capture" mce_src="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/ASP.NETBrowsersFilter_8A15/Capture_thumb.jpg" width="373" border="0" height="342"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The above works with all properties like OnClientClick!&lt;/p&gt;

&lt;p&gt;This could be useful i.e. at file upload control where each browser handles different the rendering of the tag.&lt;/p&gt;

&lt;p&gt;Cool eh? &lt;br&gt;&lt;/p&gt;&lt;p&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2008%2f08%2f12%2fasp-net-browsers-filter.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2008%2f08%2f12%2fasp-net-browsers-filter.aspx&amp;amp;fgcolor=000000&amp;amp;bgcolor=CCFF00&amp;amp;cfgcolor=333333" alt="kick it on DotNetKicks.com" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6507186" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Web+Development/default.aspx">Web Development</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Tips+n+tricks/default.aspx">Tips n tricks</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Browser+Filter/default.aspx">Browser Filter</category></item><item><title>Add scripts to head dynamically</title><link>http://weblogs.asp.net/johnkatsiotis/archive/2008/08/08/add-scripts-to-head-dynamically.aspx</link><pubDate>Fri, 08 Aug 2008 08:14:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6496741</guid><dc:creator>djsolid</dc:creator><slash:comments>13</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/johnkatsiotis/rsscomments.aspx?PostID=6496741</wfw:commentRss><comments>http://weblogs.asp.net/johnkatsiotis/archive/2008/08/08/add-scripts-to-head-dynamically.aspx#comments</comments><description>
&lt;p&gt;Many times when i develop a user control i have the need to add some javascript to the header of the page. But the header doesn't have a method where you can add script and RegisterStartupScript inserts the script at the bottom of the page.&lt;/p&gt;
  
&lt;p&gt;So i thought let's create an extension method...&lt;/p&gt;
  
&lt;p&gt;&lt;textarea name="code" class="c#"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void AddScriptToHead(this HtmlHead h, string script, bool AddScriptTags)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Literal l = new Literal()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (AddScriptTags)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; l.Text = @"&amp;lt;script type=""text/javascript""&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;lt;![CDATA["
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + script +
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @"//]]&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/script&amp;gt;";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; l.Text = script;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; h.Controls.Add(l);
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
} 
&lt;/textarea&gt;
&lt;/p&gt;

  
&lt;p&gt;This is how this method can be used for inserting javascript tags to a page's header...&lt;/p&gt;
  

&lt;textarea name="code" class="c#"&gt;Page.Header.AddScriptToHead(@"
        &amp;lt;script src=""Some Source"" type=""text/javascript""&amp;gt;&amp;lt;/script&amp;gt;
", false); 
&lt;/textarea&gt;

  
&lt;p&gt;Without the script tags....&lt;/p&gt;
  
&lt;p&gt;
&lt;textarea name="code" class="c#"&gt;Page.Header.AddScriptToHead(@"       
        function someFunction() {
        //Do Something
        }
", true);  
&lt;/textarea&gt;
&lt;/p&gt;
  
&lt;p&gt;And not only javascript but custom css files, meta tags etc...&lt;/p&gt;
  
&lt;p&gt;
&lt;textarea name="code" class="c#"&gt;Page.Header.AddScriptToHead(
            @"&amp;lt;link type=""text/css"" rel=""stylesheet"" href=""some.css""&amp;gt;&amp;lt;/link&amp;gt;"
            , false);
&lt;/textarea&gt;
&lt;/p&gt;

&lt;p&gt;That's it! Javascript, css files, meta tags and anything else can be inserted to the header dynamically!!&lt;/p&gt;
  
&lt;p&gt;Enjoy... &lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
 &lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2008%2f08%2f08%2fadd-scripts-to-head-dynamically.aspx" mce_href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2008%2f08%2f08%2fadd-scripts-to-head-dynamically.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2008%2f08%2f08%2fadd-scripts-to-head-dynamically.aspx&amp;amp;fgcolor=000000&amp;amp;bgcolor=CCFF00&amp;amp;cfgcolor=333333" alt="kick it on DotNetKicks.com" mce_src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2008%2f08%2f08%2fadd-scripts-to-head-dynamically.aspx&amp;amp;fgcolor=000000&amp;amp;bgcolor=CCFF00&amp;amp;cfgcolor=333333" border="0"&gt;&lt;/a&gt;
&lt;script language="javascript"&gt;
            dp.SyntaxHighlighter.HighlightAll('code');
                        &lt;/script&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6496741" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Web+Development/default.aspx">Web Development</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Extension+Methods/default.aspx">Extension Methods</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Page+Header/default.aspx">Page Header</category></item><item><title>ASP.NET AJAX 4.0 Template Example</title><link>http://weblogs.asp.net/johnkatsiotis/archive/2008/07/23/asp-net-ajax-4-0-template-example.aspx</link><pubDate>Wed, 23 Jul 2008 12:32:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6435491</guid><dc:creator>djsolid</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/johnkatsiotis/rsscomments.aspx?PostID=6435491</wfw:commentRss><comments>http://weblogs.asp.net/johnkatsiotis/archive/2008/07/23/asp-net-ajax-4-0-template-example.aspx#comments</comments><description>
&lt;p&gt;Yesterday was released the first preview of ASP.NET 4.0. Lot's of cool stuff come with this release and with this article i will try to demonstrate the use of templates. The example is &lt;a href="http://weblogs.asp.net/blogs/johnkatsiotis/AJAX%204.0%20Preview1%20-%20Template%20Example.zip" target="_blank" mce_href="http://weblogs.asp.net/blogs/johnkatsiotis/AJAX%204.0%20Preview1%20-%20Template%20Example.zip"&gt;available for download&lt;/a&gt;&lt;br&gt;&lt;br&gt;Let's start...&lt;br&gt;&lt;br&gt;First we have to download MicrosoftAjaxTemplates.js available from Codeplex and and add it to our project. Then we have to add a reference to our page.&lt;br&gt;We will do it via the ScriptManager like this.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;nbsp; &lt;b&gt;&amp;lt;asp:ScriptManager runat="server" ID="sm" EnablePageMethods="true"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Scripts&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:ScriptReference Path="~/MicrosoftAjaxTemplates.js" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Scripts&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;/asp:ScriptManager&amp;gt; &lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;We also enable PageMethods. Then we add a button that will get data from the server, the template that we want to use and a div to show the data...&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;&amp;lt;input type="button" id="btn" value="Show Data" onclick="exec()" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;lt;div id="myTemplate" class="sys-template"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;h3&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {{ Title }}&amp;lt;/h3&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="text" value="{{ FirstName + ' ' + LastName}}" /&amp;gt;&amp;amp;nbsp; Date:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="text" value="{{ DateNow.format('dd/MM/yyyy&amp;nbsp; hh:mm:ss') }}" /&amp;gt;&amp;amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--* if (BirthDate) { *--&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BirthDate: &amp;amp;nbsp;&amp;lt;input type="text" value="{{ BirthDate.format('dd/MM/yyyy') }}" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--* } *--&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--* if (!BirthDate) { *--&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BirthDate is unkown&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--* } *--&amp;gt;&lt;br&gt;&amp;nbsp;&amp;lt;/div&amp;gt;&lt;br&gt;&amp;nbsp;&amp;lt;div id="data"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;lt;/div&amp;gt; &lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;Then we add a WebMethod to our code-behind file and a custom class with 4 properties. This method will be used via PageMethods so it has to be public and static.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;[WebMethod]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static List&amp;lt;Info&amp;gt; GetVal()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;Info&amp;gt; l = new List&amp;lt;Info&amp;gt;();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; l.Add(new Info { BirthDate = DateTime.Parse("2/6/2008"), FirstName = "John", LastName = "Katsiotis", DateNow = DateTime.Now, Title = "Cool ASP.NET Developer" });&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; l.Add(new Info { BirthDate = null, FirstName = "Foo", LastName = "Bar", DateNow = DateTime.Now, Title = "Common Name Example" });&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Threading.Thread.Sleep(2500);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return l;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class Info&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public DateTime? BirthDate { get; set; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string FirstName { get; set; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string LastName { get; set; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public DateTime DateNow { get; set; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Title { get; set; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In our GetVal method we create two instances of class Info and we return a list that contains those two. We also create a delay of 2.5 secs.&lt;/p&gt;
&lt;p&gt;Finally we have add the nessecary javascript to our aspx page which is...&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&amp;lt;script type="text/javascript"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function initTemplateValues(_Title,_FirstName,_LastName,_DateNow,_BirthDate)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var t = new Sys.Preview.UI.Template.getTemplate($get("myTemplate"));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t.createInstance($get("data"), &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Title: _Title, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FirstName: _FirstName, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LastName: _LastName, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DateNow: _DateNow, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BirthDate: _BirthDate&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function exec()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $get('data').innerHTML='Please wait...';&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PageMethods.GetVal(onComplete,onError);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function onComplete(args)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $get('data').innerHTML=''&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(var i=0;i&amp;lt;args.length;i++)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; initTemplateValues(args[i].Title,args[i].FirstName,args[i].LastName,args[i].DateNow,args[i].BirthDate);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function onError(args)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $get('data').innerHTML=args;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/script&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;First we have exec() which calls the server-side method GetVal. Then if the call is sucessful the onComplete methods is called and foreach item in args (which type is Info) we create an area that uses the template defined in our aspx page and we add that template to a div with id results. &lt;/p&gt;
&lt;p&gt;Pretty simple don't you think? &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img src="http://weblogs.asp.net/blogs/johnkatsiotis/example.JPG" mce_src="http://weblogs.asp.net/blogs/johnkatsiotis/example.JPG" width="655" height="681"&gt;&lt;/p&gt;
&lt;p&gt;Enjoy...!!! &lt;br&gt;&lt;/p&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2008%2f07%2f23%2fasp-net-ajax-4-0-template-example.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2008%2f07%2f23%2fasp-net-ajax-4-0-template-example.aspx&amp;amp;fgcolor=000000&amp;amp;bgcolor=CCFF00&amp;amp;cfgcolor=333333" alt="kick it on DotNetKicks.com" border="0"&gt;&lt;/a&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6435491" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Web+Development/default.aspx">Web Development</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/PageMethods/default.aspx">PageMethods</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/AJAX+4.0/default.aspx">AJAX 4.0</category></item><item><title>Create a Facebook-like Ajax Image Gallery!</title><link>http://weblogs.asp.net/johnkatsiotis/archive/2008/07/07/create-a-facebook-like-ajax-image-gallery.aspx</link><pubDate>Mon, 07 Jul 2008 10:08:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6371145</guid><dc:creator>djsolid</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/johnkatsiotis/rsscomments.aspx?PostID=6371145</wfw:commentRss><comments>http://weblogs.asp.net/johnkatsiotis/archive/2008/07/07/create-a-facebook-like-ajax-image-gallery.aspx#comments</comments><description>&lt;p&gt;A lot of people have been using facebook and i am sure that everyone has noticed the ajax gallery that faecebook has. In this article we will try to make our own gallery that does the same stuff. When the user clicks on the image he navigates to the next and when the user presses the back button of the browser the previous image is displayed.&lt;/p&gt;  &lt;p&gt;We are going to use a new feature of the AJAX Framework which is History Support! (available via the property of ScriptManager, EnableHistory) &lt;/p&gt;  &lt;p&gt;First create a new "ASP.NET 3.5 Extensions Web Site"&lt;/p&gt;  &lt;p&gt;Then at the aspx page we add : &lt;/p&gt;  &lt;p&gt;&lt;i&gt;&lt;a href="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/CreateaFacebooklikeAjaxImageGallery_B8B6/2Capture.jpg" mce_href="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/CreateaFacebooklikeAjaxImageGallery_B8B6/2Capture.jpg"&gt;&lt;img src="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/CreateaFacebooklikeAjaxImageGallery_B8B6/2Capture_thumb.jpg" style="border: 0px none ;" alt="2Capture" mce_src="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/CreateaFacebooklikeAjaxImageGallery_B8B6/2Capture_thumb.jpg" border="0" width="638" height="144"&gt;&lt;/a&gt; &lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;EnableHistory : Enables the new feature of AJAX Framework which allows the user to navigate back and forward in an AJAX page.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;EnableStateHash : If true the url responible for AJAX History is encoded. By Default is true.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;OnNavigate : This event is fired when the user clicks the back button of the browser and the ScriptManager makes a postback.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;At the aspx.cs page we add :&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/CreateaFacebooklikeAjaxImageGallery_B8B6/Capture.jpg" mce_href="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/CreateaFacebooklikeAjaxImageGallery_B8B6/Capture.jpg"&gt;&lt;img src="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/CreateaFacebooklikeAjaxImageGallery_B8B6/Capture_thumb.jpg" style="border: 0px none ;" alt="Capture" mce_src="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/CreateaFacebooklikeAjaxImageGallery_B8B6/Capture_thumb.jpg" border="0" width="724" height="626"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;First we read the image folder (it could be from a database). We strip out the full path and we keep only the image name. Then we check if this is not a postback and we display the first image of our list. When the user clicks the Back Button the Navigate Event of the ScriptManager is fired. We get the current image index and we add +1. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/CreateaFacebooklikeAjaxImageGallery_B8B6/1Capture.jpg" mce_href="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/CreateaFacebooklikeAjaxImageGallery_B8B6/1Capture.jpg"&gt;&lt;img src="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/CreateaFacebooklikeAjaxImageGallery_B8B6/1Capture_thumb.jpg" style="border: 0px none ;" alt="1Capture" mce_src="http://weblogs.asp.net/blogs/johnkatsiotis/WindowsLiveWriter/CreateaFacebooklikeAjaxImageGallery_B8B6/1Capture_thumb.jpg" border="0" width="724" height="260"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When the user clicks on the ImageButton the Click event is fired. The point of interest at this method is the AddHistoryPoint of the ScriptManager. Using this method we add something that can tell us (when the user clicks the back button) what was the page like in order to be able to recreate it.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;You can download the source code from &lt;a href="http://weblogs.asp.net/blogs/johnkatsiotis/AjaxFacebookLikeGallery.zip" mce_href="http://weblogs.asp.net/blogs/johnkatsiotis/AjaxFacebookLikeGallery.zip" target="_blank"&gt;here&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;You can view a live example &lt;a href="http://samples-john.katsiotis.com/fbgallery/" mce_href="http://samples-john.katsiotis.com/fbgallery/" target="_blank"&gt;here&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;That's it! enJoy!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6371145" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Web+Development/default.aspx">Web Development</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/ASP.NET+Extensions/default.aspx">ASP.NET Extensions</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/ScriptManager/default.aspx">ScriptManager</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/AJAX+History/default.aspx">AJAX History</category></item><item><title>Shoutcast.NET - Get Details From a Shoutcast Server</title><link>http://weblogs.asp.net/johnkatsiotis/archive/2008/06/17/shoutcast-net-get-details-from-a-shoutcast-server.aspx</link><pubDate>Tue, 17 Jun 2008 18:13:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6287347</guid><dc:creator>djsolid</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/johnkatsiotis/rsscomments.aspx?PostID=6287347</wfw:commentRss><comments>http://weblogs.asp.net/johnkatsiotis/archive/2008/06/17/shoutcast-net-get-details-from-a-shoutcast-server.aspx#comments</comments><description>
&lt;p&gt;I have been using Shoutcast for a long time. And each and every time had to do the same stuff if i wanted to get details such as song title, current listener etc. So i decided to write a simple class library to make things easier. What you have to do in order to be able to use this library is to find out the exact url of your stream.&lt;/p&gt;
&lt;p&gt;Let's say that it is : http://mydomain.com:8000&lt;/p&gt;
&lt;p&gt;Then at the end you add /admin.cgi?mode=viewxml&amp;amp;pass=YOURADMINPASS. &lt;/p&gt;
&lt;p&gt;So the url becomes http://mydomain.com:8000/admin.cgi?mode=viewxml&amp;amp;pass=YOURADMINPASS&lt;/p&gt;
&lt;p&gt;Where YOURADMINPASS is the pass that you use to connect to the server. You pass the url to the constructor and you are ready to get the details! Below is an example. Replace StreamServerURL with yours.&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://img385.imageshack.us/img385/5969/shoucastqh7.png" mce_src="http://img385.imageshack.us/img385/5969/shoucastqh7.png" height="232" width="565"&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;The project is available at Codeplex. Link : &lt;a href="http://www.codeplex.com/ShoutcastNET" target="_blank" mce_href="http://www.codeplex.com/ShoutcastNET"&gt;Shoutcast.NET&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PS Now i am writing an other version which does not requires the password but it gives access to fewer details.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2008%2f06%2f17%2fshoutcast-net-get-details-from-a-shoutcast-server.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2fjohnkatsiotis%2farchive%2f2008%2f06%2f17%2fshoutcast-net-get-details-from-a-shoutcast-server.aspx" alt="kick it on DotNetKicks.com" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6287347" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Webradio/default.aspx">Webradio</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Web+Development/default.aspx">Web Development</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Winamp/default.aspx">Winamp</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Streaming/default.aspx">Streaming</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Shoutcast/default.aspx">Shoutcast</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Open+Source/default.aspx">Open Source</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/Class+Library/default.aspx">Class Library</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/johnkatsiotis/archive/tags/.NET/default.aspx">.NET</category></item></channel></rss>