<?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>Anas Ghanem  : ASP.NET</title><link>http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx</link><description>Tags: ASP.NET</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Entity Framework:What’s new in .NET 4 and VS 2010</title><link>http://weblogs.asp.net/anasghanem/archive/2009/05/22/entity-framework-what-s-new-in-net-4-and-vs-2010.aspx</link><pubDate>Fri, 22 May 2009 13:15:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7094657</guid><dc:creator>anas</dc:creator><slash:comments>0</slash:comments><comments>http://weblogs.asp.net/anasghanem/archive/2009/05/22/entity-framework-what-s-new-in-net-4-and-vs-2010.aspx#comments</comments><description>For the list of updates and enhancements , checkout this post from ADO.NET team....(&lt;a href="http://weblogs.asp.net/anasghanem/archive/2009/05/22/entity-framework-what-s-new-in-net-4-and-vs-2010.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7094657" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/News/default.aspx">News</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/.NET+4/default.aspx">.NET 4</category></item><item><title>Microsoft Free Web Platform Installer (WEB PI)</title><link>http://weblogs.asp.net/anasghanem/archive/2009/04/14/microsoft-free-web-platform-installer-web-pi.aspx</link><pubDate>Mon, 13 Apr 2009 23:05:18 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7045522</guid><dc:creator>anas</dc:creator><slash:comments>2</slash:comments><comments>http://weblogs.asp.net/anasghanem/archive/2009/04/14/microsoft-free-web-platform-installer-web-pi.aspx#comments</comments><description>Web platform installer is a small application that allow you to stay update to date with the latest .NET tools,updates and additions that is being added to the framework.Developers may not have enough time to search and read the latest releases and updates...(&lt;a href="http://weblogs.asp.net/anasghanem/archive/2009/04/14/microsoft-free-web-platform-installer-web-pi.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7045522" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/Tools/default.aspx">Tools</category></item><item><title>Sharing FormView Edit and insert templates to avoid duplicate markup</title><link>http://weblogs.asp.net/anasghanem/archive/2009/03/31/sharing-formview-edit-and-insert-templates-and-avoid-duplicate-markup.aspx</link><pubDate>Mon, 30 Mar 2009 22:50:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7012913</guid><dc:creator>anas</dc:creator><slash:comments>0</slash:comments><comments>http://weblogs.asp.net/anasghanem/archive/2009/03/31/sharing-formview-edit-and-insert-templates-and-avoid-duplicate-markup.aspx#comments</comments><description>If you used the FormView control ,I’m sure that you had modified it’s generated Edit and Insert templates(like adding calendar for the date fields , changing the textboxes that are bound to the foreign key columns with a dropdown list,adding validation...(&lt;a href="http://weblogs.asp.net/anasghanem/archive/2009/03/31/sharing-formview-edit-and-insert-templates-and-avoid-duplicate-markup.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7012913" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Login control FAQ :</title><link>http://weblogs.asp.net/anasghanem/archive/2009/03/27/login-control-faq.aspx</link><pubDate>Fri, 27 Mar 2009 16:28:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7007874</guid><dc:creator>anas</dc:creator><slash:comments>1</slash:comments><comments>http://weblogs.asp.net/anasghanem/archive/2009/03/27/login-control-faq.aspx#comments</comments><description>This post contains some of the most asked questions when using login control. 1- how to redirect users to different pages based on their roles. This can be done by handling the LoggedIn event of the Login control. protected void Login1_LoggedIn( object...(&lt;a href="http://weblogs.asp.net/anasghanem/archive/2009/03/27/login-control-faq.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7007874" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/Security/default.aspx">Security</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/LoginControls/default.aspx">LoginControls</category></item><item><title>Caching techniques for paged GridView</title><link>http://weblogs.asp.net/anasghanem/archive/2009/03/13/caching-techniques-for-paged-gridview.aspx</link><pubDate>Fri, 13 Mar 2009 17:10:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6957473</guid><dc:creator>anas</dc:creator><slash:comments>2</slash:comments><comments>http://weblogs.asp.net/anasghanem/archive/2009/03/13/caching-techniques-for-paged-gridview.aspx#comments</comments><description>Implementing output cache for the GridView is straight forward if the GridView doesn't require to provide paging functionality. And so , if you don't need paging in the GridView , you can set the output cache on the page level and the GridView will be...(&lt;a href="http://weblogs.asp.net/anasghanem/archive/2009/03/13/caching-techniques-for-paged-gridview.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6957473" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/Caching/default.aspx">Caching</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/GridView/default.aspx">GridView</category></item><item><title>Solving "A generic error occurred in GDI+" exception.</title><link>http://weblogs.asp.net/anasghanem/archive/2009/02/28/solving-quot-a-generic-error-occurred-in-gdi-quot-exception.aspx</link><pubDate>Sat, 28 Feb 2009 19:23:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6932154</guid><dc:creator>anas</dc:creator><slash:comments>8</slash:comments><comments>http://weblogs.asp.net/anasghanem/archive/2009/02/28/solving-quot-a-generic-error-occurred-in-gdi-quot-exception.aspx#comments</comments><description>Hi, If you are getting that error , then I can say that your application doesn't have a write permission on some directory. For example, if you are trying to save the Image from the memory stream to the file system , you may get that error. I also faced...(&lt;a href="http://weblogs.asp.net/anasghanem/archive/2009/02/28/solving-quot-a-generic-error-occurred-in-gdi-quot-exception.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6932154" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/GDI_2B00_/default.aspx">GDI+</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/Infragistics/default.aspx">Infragistics</category></item><item><title>Resetting scroll position after partial update Completed.</title><link>http://weblogs.asp.net/anasghanem/archive/2009/01/02/resetting-scroll-position-after-partial-update-completed.aspx</link><pubDate>Thu, 01 Jan 2009 22:56:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6812544</guid><dc:creator>anas</dc:creator><slash:comments>2</slash:comments><comments>http://weblogs.asp.net/anasghanem/archive/2009/01/02/resetting-scroll-position-after-partial-update-completed.aspx#comments</comments><description>When you use the UpdatePanel to implement partial updates,the scroll position will be maintained between the asynchronous post backs;But you may need to reset the scroll position after the partial update completed ( after receiving the response). To do...(&lt;a href="http://weblogs.asp.net/anasghanem/archive/2009/01/02/resetting-scroll-position-after-partial-update-completed.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6812544" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/Ajax/default.aspx">Ajax</category></item><item><title>Sharing ASP.NET security Database between different applications</title><link>http://weblogs.asp.net/anasghanem/archive/2008/12/22/sharing-asp-net-security-database-between-different-applications.aspx</link><pubDate>Mon, 22 Dec 2008 21:56:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6801587</guid><dc:creator>anas</dc:creator><slash:comments>1</slash:comments><comments>http://weblogs.asp.net/anasghanem/archive/2008/12/22/sharing-asp-net-security-database-between-different-applications.aspx#comments</comments><description>This blog will mention the steps that is required to share the asp.net security database between different applications. The steps to follow : Since you are going to use one database for many applications , it will not be practical to have the database...(&lt;a href="http://weblogs.asp.net/anasghanem/archive/2008/12/22/sharing-asp-net-security-database-between-different-applications.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6801587" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/Security/default.aspx">Security</category></item><item><title>Changing the session ID programmatically.</title><link>http://weblogs.asp.net/anasghanem/archive/2008/12/16/programmatically-changing-the-session-id.aspx</link><pubDate>Tue, 16 Dec 2008 20:48:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6791395</guid><dc:creator>anas</dc:creator><slash:comments>2</slash:comments><comments>http://weblogs.asp.net/anasghanem/archive/2008/12/16/programmatically-changing-the-session-id.aspx#comments</comments><description>
&lt;p&gt;In this blog, I will show how to change the Assigned session Id programmatically.&lt;/p&gt;
  
&lt;p&gt;You may ask : why I need to change the automatically generated the user session id ? well there is many possible reasons like :&lt;/p&gt;
  
&lt;ul&gt;   
&lt;li&gt;You may use the session ID to track the User activities or to implement &lt;a href="http://en.wikipedia.org/wiki/Audit_trail" mce_href="http://en.wikipedia.org/wiki/Audit_trail"&gt;audit trails&lt;/a&gt; in your system. &lt;/li&gt;
    
&lt;li&gt;Preventing &lt;a href="http://en.wikipedia.org/wiki/Session_hijacking" mce_href="http://en.wikipedia.org/wiki/Session_hijacking"&gt;Session Hijacking&lt;/a&gt; by generating a new session id after the user logged in. &lt;/li&gt;
    
&lt;li&gt;Removing the user session after logging out. &lt;/li&gt;
 &lt;/ul&gt;
  
&lt;p&gt;There could be more reasons that I don't know about them , if you know more reasons feel&amp;nbsp; free to post it in the comments section .&lt;/p&gt;
  
&lt;p&gt;Changing the Session id is an easy task in asp.net.You just need to use &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionidmanager.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionidmanager.aspx"&gt;SessionIDManager&lt;/a&gt; class.&lt;/p&gt;
  
&lt;p&gt;The class contains a lot of helpful methods ,I will list some of them :&lt;/p&gt;
  
&lt;ul&gt;   
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionidmanager.createsessionid.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionidmanager.createsessionid.aspx"&gt;CreateSessionID&lt;/a&gt; : returns a unique session identifier that is a randomly generated number encoded into a 24-character string. &lt;/li&gt;
    
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionidmanager.getsessionid.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionidmanager.getsessionid.aspx"&gt;GetSessionID&lt;/a&gt; :&amp;nbsp; gets the session-identifier value from the current Web request. &lt;/li&gt;
    
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionidmanager.savesessionid.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionidmanager.savesessionid.aspx"&gt;SaveSessionID&lt;/a&gt; : saves a newly created session identifier to the HTTP response. &lt;/li&gt;
 &lt;/ul&gt;
  
&lt;p&gt;The rest of methods and class members can be found &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionidmanager_members.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionidmanager_members.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;
  
&lt;p&gt;I will now show a simple code that will print the Current SessionId and Create a new session id and save it to the context.&lt;/p&gt;
  
&lt;p&gt;[Code provided in C# ]&lt;/p&gt;
  &lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1256\uc1 \deff0{\fonttbl{\f0\fnil\fcharset178\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red43\green145\blue175;\red0\green0\blue255;\red163\green21\blue21;}??\fs20         \cf3 SessionIDManager\cf0  Manager = \cf4 new\cf0  \cf3 SessionIDManager\cf0 ();\par ??\par ??        \cf4 string\cf0  NewID = Manager.CreateSessionID(Context);\par ??        \cf4 string\cf0  OldID = Context.Session.SessionID;\par ??        \cf4 bool\cf0  redirected = \cf4 false\cf0 ;\par ??        \cf4 bool\cf0  IsAdded = \cf4 false\cf0 ;\par ??        Manager.SaveSessionID(Context, NewID,\cf4 out\cf0  redirected, \cf4 out\cf0  IsAdded);\par ??        Response.Write(\cf5 "Old SessionId Is : "\cf0  + OldID);\par ??        \cf4 if\cf0  (IsAdded)\par ??        \{\par ??            Response.Write(\cf5 "&amp;lt;br/&amp;gt; New Session ID Is : "\cf0  + NewID);\par ??        \}\par ??        \cf4 else\par ??\cf0         \{\par ??            Response.Write(\cf5 "&amp;lt;br/&amp;gt; Session Id did not saved : "\cf0 );\par ??        \}}
--&gt;
&lt;div style="background: white none repeat scroll 0% 0%; font-family: Courier New; font-size: 10pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(43, 145, 175);"&gt;SessionIDManager&lt;/span&gt; Manager = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;SessionIDManager&lt;/span&gt;();&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; NewID = Manager.CreateSessionID(Context);&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; OldID = Context.Session.SessionID;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; redirected = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; IsAdded = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Manager.SaveSessionID(Context, NewID,&lt;span style="color: blue;"&gt;out&lt;/span&gt; redirected, &lt;span style="color: blue;"&gt;out&lt;/span&gt; IsAdded);&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Write(&lt;span style="color: rgb(163, 21, 21);"&gt;"Old SessionId Is : "&lt;/span&gt; + OldID);&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (IsAdded)&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Write(&lt;span style="color: rgb(163, 21, 21);"&gt;"&amp;lt;br/&amp;gt; New Session ID Is : "&lt;/span&gt; + NewID);&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Write(&lt;span style="color: rgb(163, 21, 21);"&gt;"&amp;lt;br/&amp;gt; Session Id did not saved : "&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;/div&gt;

  &lt;br&gt;
&lt;p&gt;Hope it helps.&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6791395" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/Session/default.aspx">Session</category></item><item><title>Securing your web site using session</title><link>http://weblogs.asp.net/anasghanem/archive/2008/11/07/securing-your-web-site-using-session.aspx</link><pubDate>Fri, 07 Nov 2008 12:36:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6725189</guid><dc:creator>anas</dc:creator><slash:comments>3</slash:comments><comments>http://weblogs.asp.net/anasghanem/archive/2008/11/07/securing-your-web-site-using-session.aspx#comments</comments><description>&lt;p&gt;When using&amp;nbsp; Asp.net , there is many ways to secure your web site pages . you can use Windows authentication , Or Forms Authentication services.&lt;/p&gt;  &lt;p&gt;Through asp.Net forums, I noticed that there is many developers trying to use the session to secure there web sites.they are doing this by storing some flag in the session , like storing the username , so that they can check this value in the pages to make sure that the user is logged in.&lt;/p&gt;  &lt;p&gt;Note: I recommended to not use the session to secure the web site , because session will timeout , and so your users will need to login on every timeout period ( 20 minutes by default) . also when using the session , you will need to manually manage the user roles , while you don't have to worry about that if you used Membership Services.&lt;/p&gt;  &lt;p&gt;However, if you still want to use the session ,I will show you how to correctly implement that using a custom base page class .&lt;/p&gt;  &lt;p&gt;Note: The Base Class will contains the required checks , and so you need to change your pages to inherit from this custom class instead of inheriting from "System.Web.UI.Page" class which is the Default class for ASPX pages.&lt;/p&gt;  &lt;p&gt;Ok , Take a look at the Base Page class Below :&lt;/p&gt;  &lt;div style="overflow: auto;"&gt;   &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset178\fprq1 Courier New;}}{\colortbl;??\red128\green128\blue128;\red255\green255\blue255;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;\red43\green145\blue175;\red163\green21\blue21;}??\fs20 \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??///\cf3  this page will be used as a basePage class for all pages that needs to be secured .\par ??\cf1 ///\cf3  so if you want to make some pages secured , \par ??\cf1 ///\cf3  just let them inherit from this class instead of directly  inherting from System.Web.UI.Page\par ??\cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??///\cf3  \par ??\cf4 public\cf0  \cf4 class\cf0  \cf6 SecuredPage\cf0  : System.Web.UI.\cf6 Page\par ??\cf0 \{\par ??\par ??    \cf4 protected\cf0  \cf4 string\cf0  LoginUrl\par ??    \{\par ??        \cf4 get\cf0  \{ \cf4 return\cf0  \cf7 "~/Login.aspx"\cf0 ; \}\par ??    \}\par ??\par ??    \cf3 // return true if the current page is the Login Page .\par ??\cf0     \cf4 private\cf0  \cf4 bool\cf0  IsLoginPage\par ??    \{\par ??        \cf4 get\cf0  \{\par ??            \cf4 return\cf0  \cf6 VirtualPathUtility\cf0 .GetFileName(Request.Path).ToLower() == \par ??                \cf6 VirtualPathUtility\cf0 .GetFileName(LoginUrl.ToLower());\par ??        \}\par ??    \}\par ??\par ??    \cf3 // get the UserName from the session\par ??\cf0     \cf4 private\cf0  \cf4 const\cf0  \cf4 string\cf0  UserNameKey = \cf7 "UserName"\cf0 ;\par ??    \cf4 protected\cf0  \cf4 string\cf0   UserName\par ??    \{\par ??        \cf4 get\par ??\cf0         \{\par ??            \cf4 return\cf0  \cf6 Convert\cf0 .ToString(Session[UserNameKey]);\par ??        \}\par ??        \cf4 set\cf0  \{\par ??            Session[UserNameKey] = \cf4 value\cf0 ;\par ??        \}\par ??    \}\par ??\par ??    \cf4 protected\cf0  \cf4 string\cf0  DefaultPage\par ??    \{\par ??        \cf4 get\cf0  \{\par ??            \cf4 return\cf0  \cf7 "Default.aspx"\cf0 ;\par ??        \}\par ??    \}\par ??    \cf4 protected\cf0  \cf4 void\cf0  RequestLogin()\par ??    \{\par ??        \cf4 string\cf0  CurrentUrl = Request.RawUrl;\par ??        Response.Redirect(LoginUrl + \cf7 "?ReturnUrl="\cf0  + Server.HtmlEncode( CurrentUrl));\par ??    \}\par ??\par ??    \cf3 // use this method to redirect the user after sucessfull login , \par ??\cf0     \cf3 // this method will make sure that the user will get redirected to the original url  that was on .\par ??\par ??\cf0     \cf4 protected\cf0  \cf4 void\cf0  RedirectFromLoginPage(\cf4 string\cf0  TargetUrl)\par ??    \{\par ??        \cf4 if\cf0  (! \cf4 string\cf0 .IsNullOrEmpty(UserName))\par ??        \{\par ??            \cf4 if\cf0  (Request.QueryString[\cf7 "ReturnUrl"\cf0 ] != \cf4 null\cf0 )\par ??            \{\par ??                Response.Redirect(Request.QueryString[\cf7 "ReturnUrl"\cf0 ]);\par ??            \}\par ??            \cf4 else\par ??\cf0                 Response.Redirect(TargetUrl);\par ??        \}\par ??    \}\par ??\par ??    \cf3 // you can just call this method , it will automatically redirect to default page ,\par ??\cf0      \cf4 protected\cf0  \cf4 void\cf0  RedirectFromLoginPage()\par ??     \{\par ??         RedirectFromLoginPage(DefaultPage);\par ??     \}\par ??    \par ??    \cf4 protected\cf0  \cf4 override\cf0  \cf4 void\cf0  OnInit(\cf6 EventArgs\cf0  e)\par ??    \{\par ??        \cf3 // if the user is not logged in  , redirect  to Login Page\par ??\cf0         \cf4 if\cf0  (\cf4 string\cf0 .IsNullOrEmpty(UserName) &amp;amp;&amp;amp; !IsLoginPage)\par ??            RequestLogin();\par ??        \cf3 // this needed to initialize its base page class\par ??\cf0         \cf4 base\cf0 .OnInit(e);\par ??    \}\par ??\}\par ??}
--&gt;    &lt;div style="background: white none repeat scroll 0% 0%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;     &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; this page will be used as a basePage class for all pages that needs to be secured .&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; so if you want to make some pages secured , &lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; just let them inherit from this class instead of directly&amp;nbsp; inheriting from System.Web.UI.Page&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 10&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 11&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 12&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;SecuredPage&lt;/span&gt; : System.Web.UI.&lt;span style="color: rgb(43, 145, 175);"&gt;Page&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 13&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 14&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; LoginUrl&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: rgb(163, 21, 21);"&gt;"~/Login.aspx"&lt;/span&gt;; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 19&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// return true if the current page is the Login Page .&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; IsLoginPage&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 24&lt;/span&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; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;VirtualPathUtility&lt;/span&gt;.GetFileName(Request.Path).ToLower() == &lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 25&lt;/span&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; &lt;span style="color: rgb(43, 145, 175);"&gt;VirtualPathUtility&lt;/span&gt;.GetFileName(LoginUrl.ToLower());&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 26&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 27&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 28&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 29&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Property to get/set the UserName from/in the session&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 30&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; UserNameKey = &lt;span style="color: rgb(163, 21, 21);"&gt;"UserName"&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 31&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp; UserName&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 32&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 33&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 34&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 35&lt;/span&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; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Convert&lt;/span&gt;.ToString(Session[UserNameKey]);&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 36&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 37&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 38&lt;/span&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; Session[UserNameKey] = &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 39&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 40&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 41&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 42&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; DefaultPage&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 43&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 44&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 45&lt;/span&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; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: rgb(163, 21, 21);"&gt;"Default.aspx"&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 46&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 47&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 48&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; RequestLogin()&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 49&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 50&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; CurrentUrl = Request.RawUrl;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 51&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Redirect(LoginUrl + &lt;span style="color: rgb(163, 21, 21);"&gt;"?ReturnUrl="&lt;/span&gt; + Server.HtmlEncode( CurrentUrl));&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 52&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 53&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 54&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// use this method to redirect the user after sucessfull login , &lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 55&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// this method will make sure that the user will get redirected to the original url&amp;nbsp; that was on .&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 56&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 57&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; RedirectFromLoginPage(&lt;span style="color: blue;"&gt;string&lt;/span&gt; TargetUrl)&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 58&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 59&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (! &lt;span style="color: blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(UserName))&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 60&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 61&lt;/span&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; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (Request.QueryString[&lt;span style="color: rgb(163, 21, 21);"&gt;"ReturnUrl"&lt;/span&gt;] != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 62&lt;/span&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; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 63&lt;/span&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; Response.Redirect(Request.QueryString[&lt;span style="color: rgb(163, 21, 21);"&gt;"ReturnUrl"&lt;/span&gt;]);&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 64&lt;/span&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; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 65&lt;/span&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; &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 66&lt;/span&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; Response.Redirect(TargetUrl);&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 67&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 68&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 69&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 70&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// you can just call this method , it will automatically redirect to default page ,&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 71&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; RedirectFromLoginPage()&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 72&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 73&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RedirectFromLoginPage(DefaultPage);&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 74&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 75&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 76&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnInit(&lt;span style="color: rgb(43, 145, 175);"&gt;EventArgs&lt;/span&gt; e)&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 77&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 78&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// if the user is not logged in&amp;nbsp; , redirect&amp;nbsp; to Login Page&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 79&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(UserName) &amp;amp;&amp;amp; !IsLoginPage)&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 80&lt;/span&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; RequestLogin();&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 81&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// this needed to initialize its base page class&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 82&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;.OnInit(e);&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 83&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 84&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;

  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;To Use the above class, change your pages to inherit from it, then in the login page , you can handle the Authenticate event for your login control&amp;nbsp; like this :&lt;/p&gt;

&lt;div style="overflow: auto;"&gt;
  &lt;p&gt;&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1256\uc1 \deff0{\fonttbl{\f0\fnil\fcharset178\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;\red0\green128\blue0;\red163\green21\blue21;}??\fs20     \cf3 protected\cf0  \cf3 void\cf0  Login1_Authenticate(\cf3 object\cf0  sender, \cf4 AuthenticateEventArgs\cf0  e)\par ??    \{\par ??        \cf3 bool\cf0  Authenticated = \cf3 true\cf0 ;\par ??        Authenticated = ValidateLogin(Login1.UserName, Login1.Password);\par ??        \cf3 if\cf0  (Authenticated)\par ??        \{\par ??            e.Authenticated = Authenticated;\par ??            \cf5 // store the user name in the session\par ??\cf0             UserName = Login1.UserName;\par ??            \cf5 // use this method instead of directly calling response.redirect ,\par ??\cf0             \cf5 // because this method will remember the previous page that the user requested ,\par ??\par ??\cf0             RedirectFromLoginPage();\par ??        \}\par ??    \}\par ??\par ??    \cf3 private\cf0  \cf3 bool\cf0  ValidateLogin(\cf3 string\cf0  UserName, \cf3 string\cf0  Password)\par ??    \{\par ??        \cf5 // here you need to check the entered user and pasword ,\par ??\cf0         \cf5 //you may need to check the users table in the database ..\par ??\cf0         \cf5 //Authenticated= UserBLL.ValidateUser(Login1.UserName, Login1.Password);\par ??\cf0         \cf5 // for this  , demo lets just use User:admin and password:admin\par ??\par ??\cf0         \cf5 // again , instead of this code , you must validate your users based on database or else.\par ??\cf0         \cf3 return\cf0  UserName == \cf6 "admin"\cf0  &amp;amp;&amp;amp; Password == \cf6 "admin"\cf0 ;\par ??    \}}
--&gt;&lt;/p&gt;

  &lt;div style="background: white none repeat scroll 0% 0%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;
    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Login1_Authenticate(&lt;span style="color: blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color: rgb(43, 145, 175);"&gt;AuthenticateEventArgs&lt;/span&gt; e)&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; Authenticated = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Authenticated = ValidateLogin(Login1.UserName, Login1.Password);&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (Authenticated)&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 24&lt;/span&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; &lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 25&lt;/span&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; &lt;span style="color: green;"&gt;// store the user name in the session&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 26&lt;/span&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; UserName = Login1.UserName;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 27&lt;/span&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; &lt;span style="color: green;"&gt;// use this method instead of directly calling response.redirect ,&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 28&lt;/span&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; &lt;span style="color: green;"&gt;// because this method will remember the previous page that the user requested ,&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 29&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 30&lt;/span&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; RedirectFromLoginPage();&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 31&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 32&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 33&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 34&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; ValidateLogin(&lt;span style="color: blue;"&gt;string&lt;/span&gt; UserName, &lt;span style="color: blue;"&gt;string&lt;/span&gt; Password)&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 35&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 36&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// here you need to check the entered user and pasword ,&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 37&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//you may need to check the users table in the database ..&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 38&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//Authenticated= UserBLL.ValidateUser(Login1.UserName, Login1.Password);&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 39&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// for this&amp;nbsp; , demo lets just use User:admin and password:admin&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 40&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 41&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// again , instead of this code , you must validate your users based on database or else.&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 42&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; UserName == &lt;span style="color: rgb(163, 21, 21);"&gt;"admin"&lt;/span&gt; &amp;amp;&amp;amp; Password == &lt;span style="color: rgb(163, 21, 21);"&gt;"admin"&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 43&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Note: RedirectFromLoginPage() method will make sure to send the user back to the page that he/she was on .&lt;/p&gt;

&lt;p&gt;I created a demo website that will show you how to use the SecuredPage class in your website , you can download the demo [&lt;a href="http://weblogs.asp.net/blogs/anasghanem/BlogPosts/SecurityUsingSession.zip" mce_href="http://weblogs.asp.net/blogs/anasghanem/BlogPosts/SecurityUsingSession.zip"&gt;&lt;b&gt;here&lt;/b&gt;&lt;/a&gt;].&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Hope it helps.&lt;/p&gt;

&lt;p&gt;Anas Ghanem&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6725189" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/Session/default.aspx">Session</category></item><item><title>Avoid session loss when using Cookieless sessions with XML Sitemap Provider</title><link>http://weblogs.asp.net/anasghanem/archive/2008/10/30/avoid-session-loss-when-using-cookieless-sessions-with-xml-sitemap-provider.aspx</link><pubDate>Thu, 30 Oct 2008 08:10:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6710281</guid><dc:creator>anas</dc:creator><slash:comments>0</slash:comments><comments>http://weblogs.asp.net/anasghanem/archive/2008/10/30/avoid-session-loss-when-using-cookieless-sessions-with-xml-sitemap-provider.aspx#comments</comments><description>&lt;p&gt;In march 2008 , &lt;a href="http://weblogs.asp.net/anasghanem/archive/2008/03/08/tip-trick-preventing-session-loss-when-using-cookieless-sessions-with-treeview-and-menu-controls.aspx" mce_href="http://weblogs.asp.net/anasghanem/archive/2008/03/08/tip-trick-preventing-session-loss-when-using-cookieless-sessions-with-treeview-and-menu-controls.aspx"&gt;I&amp;nbsp; showed how to avoid losing session&lt;/a&gt; when using cookiless sessions with XmlSiteMapPorvider. I mentioned how to quickly fix this issue&amp;nbsp; by handling the Data Bound events of Navigation controls . Since This issue is still reproducible in .Net 3.5 ,I published an article that discusses this issue in more details , Read the article.&lt;a href="http://www.codeproject.com/KB/session/AvoidSessionLosXMLSitemap.aspx" mce_href="http://www.codeproject.com/KB/session/AvoidSessionLosXMLSitemap.aspx"&gt;[Here]&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6710281" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/Session/default.aspx">Session</category></item><item><title>Creating Custom Parameters for Data source Controls</title><link>http://weblogs.asp.net/anasghanem/archive/2008/10/15/creating-custom-parameters-for-your-data-sources.aspx</link><pubDate>Tue, 14 Oct 2008 21:56:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6681390</guid><dc:creator>anas</dc:creator><slash:comments>4</slash:comments><comments>http://weblogs.asp.net/anasghanem/archive/2008/10/15/creating-custom-parameters-for-your-data-sources.aspx#comments</comments><description>&lt;p&gt;Asp.net provide various types of parameters , like session parameter which&amp;nbsp; get its value from session ,control parameter which get its value from form control , and there is also many other parameters each one used to read the parameter value from different location .&lt;/p&gt;
 
&lt;p&gt;But sometimes , those parameters doesn't fit your needs , for example , if you want a parameter that get its value from the UserName of the current logged in user ( User.Identity.Name ) , in this case you may end up by using the default &amp;lt;asp:Parameter &amp;gt; which requires to set its value manually in the data Source Selecting , Updating , Inserting , or deleting event.&lt;/p&gt;
 
&lt;p&gt;However , you could create a custom parameter that can be used in all places that you want to use the Current logged in UserName as&amp;nbsp; a parameter in the data source controls&amp;nbsp; , this can be accomplished by inheriting from &lt;i&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.parameter.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.parameter.aspx"&gt;System.Web.UI.WebControls.Parameter&lt;/a&gt;&lt;/i&gt; class , and by overriding it's Evaluate method.&lt;/p&gt;
 
&lt;p&gt;Note: the evaluate method will be called automatically by the framework .&lt;/p&gt;
 
&lt;p&gt;The custom parameter can be placed in App_Code folder or in a separate class library if you want to use it in other projects.&lt;/p&gt;
 
&lt;p&gt;This is the custom UserParameter class:&lt;/p&gt;

&lt;div style="overflow: auto;"&gt;
&lt;div style="background: white none repeat scroll 0% 0%; font-family: Courier New; font-size: 10pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt; CustomControls&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/span&gt;&amp;nbsp;{&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Summary description for UserParameter&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;UserParameter&lt;/span&gt; : System.Web.UI.WebControls.&lt;span style="color: rgb(43, 145, 175);"&gt;Parameter&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;object&lt;/span&gt; Evaluate(&lt;span style="color: rgb(43, 145, 175);"&gt;HttpContext&lt;/span&gt; context, System.Web.UI.&lt;span style="color: rgb(43, 145, 175);"&gt;Control&lt;/span&gt; control)&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (context.User != &lt;span style="color: blue;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !&lt;span style="color: blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(context.User.Identity.Name))&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/span&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; &lt;span style="color: blue;"&gt;return&lt;/span&gt; context.User.Identity.Name;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/span&gt;&amp;nbsp;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;Now to use the UserName parameter,&lt;br&gt;&amp;nbsp;&lt;br&gt;First thing , you should register the custom control ,&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;lt;%@ Register Namespace="CustomControls" TagPrefix="cc1" %&amp;gt;&lt;br&gt;&lt;br&gt;Then you can use it as a parameter for your data source :&lt;br&gt;&lt;/p&gt;
&lt;div style="background: white none repeat scroll 0% 0%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;
&lt;div style="overflow: auto;"&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;/span&gt;&amp;lt;asp:&lt;span style="color: rgb(43, 145, 175);"&gt;SqlDataSource&lt;/span&gt; ID=&lt;span style="color: rgb(163, 21, 21);"&gt;"SqlDataSource1"&lt;/span&gt; runat=&lt;span style="color: rgb(163, 21, 21);"&gt;"server" &lt;/span&gt;ConnectionString=&lt;span style="color: rgb(163, 21, 21);"&gt;"&amp;lt;$ConnectionStrings:DatabaseConnectionString %&amp;gt;"&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;SelectCommand=&lt;span style="color: rgb(163, 21, 21);"&gt;"SELECT [ProjectId], [Name], [UserName] FROM [Projects] where [UserName]=@UserName"&lt;/span&gt;&amp;gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt; &amp;lt;SelectParameters&amp;gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;nbsp; &lt;b&gt;&amp;lt;cc1:UserParameter Name=&lt;span style="color: rgb(163, 21, 21);"&gt;"UserName"&lt;/span&gt; /&amp;gt;&lt;/b&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/SelectParameters&amp;gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/asp:&lt;span style="color: rgb(43, 145, 175);"&gt;SqlDataSource&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;/div&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;Hope it helps&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;Anas Ghanem&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6681390" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Development Tip #1: Wrap your Date Selector inside a User control</title><link>http://weblogs.asp.net/anasghanem/archive/2008/09/20/development-tip-1-wrap-your-date-selector-inside-a-user-control.aspx</link><pubDate>Fri, 19 Sep 2008 22:38:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6635080</guid><dc:creator>anas</dc:creator><slash:comments>3</slash:comments><comments>http://weblogs.asp.net/anasghanem/archive/2008/09/20/development-tip-1-wrap-your-date-selector-inside-a-user-control.aspx#comments</comments><description>&lt;p&gt;When developing web application, you will need to decide which date selector you are going to use , you may choose between the &lt;a href="http://wiki.asp.net/page.aspx/417/calendar-extender/" mce_href="http://wiki.asp.net/page.aspx/417/calendar-extender/"&gt;Caledar Extendar&lt;/a&gt; , or any other 3'rd party controls (like infragistics ,Telerik ,...).In the future , if you decided to change the date selector for some reason , you will need to go to all places in which you used the date selector and change the code to use the new date selector control !&lt;/p&gt;  &lt;p&gt;The required changes could be :&lt;br&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;you will need to remove all "&amp;lt;%@ register&amp;nbsp; " tags that reference the old control&lt;/li&gt;    &lt;li&gt;change the pages code behind to use the new control .&lt;/li&gt;    &lt;li&gt;also you&amp;nbsp; may need to change the validations.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;The Solution :&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;What I suggest here is that from the Beginning of the development , create a User Control that expose some properties like Selected Date(set , get) , and another property like IsRequired , and inside the user control , you can place any type of date selector control , then you just need to use this user control as a date selector in your web site , and when you want to change the date selector control , you just need to change the user control code .&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Hope it helps&lt;/p&gt;  &lt;p&gt;Anas Ghanem&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6635080" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Fixing DotNetNuke localization for child and dynamically loaded UserControls</title><link>http://weblogs.asp.net/anasghanem/archive/2008/09/10/fixing-dotnetnuke-localization-for-child-and-dynamically-loaded-usercontrols.aspx</link><pubDate>Wed, 10 Sep 2008 17:42:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6616623</guid><dc:creator>anas</dc:creator><slash:comments>1</slash:comments><comments>http://weblogs.asp.net/anasghanem/archive/2008/09/10/fixing-dotnetnuke-localization-for-child-and-dynamically-loaded-usercontrols.aspx#comments</comments><description>
&lt;p&gt;The DotNetNuke&amp;nbsp; localization engine depends heavily on the "LocalResourceFile" property which is contained in "PortalModuleBase" class which is must be the base class for the UserCotrols that needs to be used as a controls for the&amp;nbsp; Module.&lt;/p&gt;
  
&lt;p&gt;The "LocalresourceFile" property uses the following code to get the correct Localization file for the control ( the code based on&amp;nbsp; DNN 4.08.04)&lt;/p&gt;
  
&lt;p&gt;&lt;b&gt;Me.TemplateSourceDirectory &amp;amp; "/" &amp;amp; Services.Localization.Localization.LocalResourceDirectory &amp;amp; "/" &amp;amp; Me.ID&lt;/b&gt;&lt;/p&gt;
  
&lt;p&gt;Note how the property value depends on the UserCotrol ID , this will cause the problem&amp;nbsp; when the UserCotrol used as a child UserCotrol in another UserCotrol , or when its dynamically loaded to a nother&amp;nbsp; UserCotrol (using the LoadControl method) . in both cases the "LocalResourceFile" property will returns incorrect resource file which prevent the DotNetNuke&amp;nbsp; from localizing the control .&lt;/p&gt;
  
&lt;p&gt;Note that when dynamically loading the UserCotrol using LoadControl method , &lt;u&gt;the UserCotrol Id will be null&lt;/u&gt; , and when we place the UserCotrol in another UserCotrol , the UserCotrol id will be the Instance Id , for example if the UserCotrol is "Products.ascx" , then its id will be Products1 or the id that is assigned to it by the developer.&lt;/p&gt;
  
&lt;p&gt;To overcome all of the above issues , the solution is to modify the LocalResourceFile for the UserCotrol , this can be applied by creating a new "LocalResourceFile" property that shadows the Property of the PortalModuleBase control (since the property is not overridable ), and statically return the correct LocalResourceFile , the problem in this solution is that you need to apply it to every UserCotrol .&lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p&gt;The other solution( and the best I think)&amp;nbsp; is to create a base UserCotrol class that inherits from PortalModuleBase and fix the LocalResourceFile like below :&lt;/p&gt;
  &lt;div style="overflow: auto; background-color: rgb(238, 238, 238); font-size: larger;"&gt;   
&lt;pre&gt;public partial class BaseUserControl : DotNetNuke.Entities.Modules.PortalModuleBase&lt;br&gt;{&lt;br&gt;    // basicly this will fix the localization issue &lt;br&gt;    protected override void OnInit(EventArgs e)&lt;br&gt;    {&lt;br&gt;        base.OnInit(e);&lt;br&gt;        string FileName = System.IO.Path.GetFileNameWithoutExtension(this.AppRelativeVirtualPath);&lt;br&gt;        if (this.ID != null)&lt;br&gt;            //this will fix it when its placed as a ChildUserControl &lt;br&gt;            this.LocalResourceFile = this.LocalResourceFile.Replace(this.ID, FileName);&lt;br&gt;        else&lt;br&gt;            // this will fix it when its dynamically loaded using LoadControl method &lt;br&gt;            this.LocalResourceFile = this.LocalResourceFile + FileName + ".ascx.resx";&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;br&gt;Now change your UserControls to inherit from BaseUserControl Instead of directly inheriting PortalModuleBase .&lt;/p&gt;

&lt;p&gt;I can place that code in the PortalModuleBase directly , but I don't like the idea of modifying the Core DNN code , It will be nice if the DNN core team added that fix ).&lt;/p&gt;

&lt;p&gt;I used that solution in my projects , Please Let me know if there is any issues in it.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Thanks &lt;/p&gt;

&lt;p&gt;Anas Ghanem&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6616623" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/DotNetNuke/default.aspx">DotNetNuke</category></item><item><title>Implementing Outputcache with ListView Paging</title><link>http://weblogs.asp.net/anasghanem/archive/2008/09/06/using-the-listview-to-provide-a-high-performance-and-scalable-paging-by-implementing-output-caching-with-the-listview-paging.aspx</link><pubDate>Sat, 06 Sep 2008 14:15:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6585073</guid><dc:creator>anas</dc:creator><slash:comments>2</slash:comments><comments>http://weblogs.asp.net/anasghanem/archive/2008/09/06/using-the-listview-to-provide-a-high-performance-and-scalable-paging-by-implementing-output-caching-with-the-listview-paging.aspx#comments</comments><description>&lt;p&gt;The ListView Control &lt;a href="http://weblogs.asp.net/anasghanem/archive/2008/09/06/comparing-listview-with-gridview-datalist-and-repeater.aspx" mce_href="http://weblogs.asp.net/anasghanem/archive/2008/09/06/comparing-listview-with-gridview-datalist-and-repeater.aspx"&gt;Supports a lot of functionalities&lt;/a&gt; , one of those functionalities is the built in support for data paging .&lt;/p&gt;&lt;p&gt;You can implement data paging in ListView with a help of the&amp;nbsp; &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.datapager.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.datapager.aspx"&gt;DataPager &lt;/a&gt;control.&lt;br&gt;&lt;/p&gt;&lt;p&gt; The default behavior of the DataPager control is to provide paging functionality through PostBacks(like the GridView ) control , but the interesting thing is that the Pager Can Be configured to use the query string to keep the current displayed page , this behavior is very important if it used with the output cache to vary the page output Based on That query Field, this way you will have a separate cached version of the web page&amp;nbsp; for each ListView Page, so that you can Provide an Effective and scalable data paging solution ( for example like the "http://weblogs.asp.net" page ) .&lt;/p&gt;&lt;p&gt;To configure the DataPager control to use the querystring , you need to set its "QueryStringField" property to the query string paramter name that you want to use .&lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;asp:DataPager ID="DataPager1" runat="server" &lt;span style="font-weight: bold;"&gt;QueryStringField&lt;/span&gt;="PageNumber".... &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Now the Pager control will add the page number to the querystring field in the page url , for example :&lt;/p&gt;&lt;p&gt;Default.aspx?PageNumber=1&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Now you can vary the page outputcache based on the "PageNumber" query string field using output cache directive , in the page decalration :&lt;/p&gt;&lt;p&gt;&amp;lt;%@ OutputCache Duration="90" VaryByParam="PageNumber"&amp;nbsp; %&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;This way you will have a separate cached version for each ListView page , and so your application will use the cached version for the subsequent requsts of the same ListViewPage.&lt;/p&gt;&lt;p&gt;You can also optimize this solution by turning off the ListView ViewState by setting its EnabeViewState property to false .&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Anas Ghanem &lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6585073" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item></channel></rss>