<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Jigar Desai</title><subtitle type="html">My experiments with ASP.net</subtitle><id>http://weblogs.asp.net/jigardesai/atom.aspx</id><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jigardesai/default.aspx" /><link rel="self" type="application/atom+xml" href="http://weblogs.asp.net/jigardesai/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20510.895">Community Server</generator><updated>2008-01-26T23:38:00Z</updated><entry><title>Hotmail's Annoying Upgrade Your Browser Message. </title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jigardesai/archive/2008/12/21/hotmail-s-annoying-upgrade-your-browser-message.aspx" /><id>http://weblogs.asp.net/jigardesai/archive/2008/12/21/hotmail-s-annoying-upgrade-your-browser-message.aspx</id><published>2008-12-21T22:43:00Z</published><updated>2008-12-21T22:43:00Z</updated><content type="html">&lt;p&gt;Any body else is
getting following "Upgrade your web browser" message on hotmail? I some time get following "Upgrade your web browser" message on Windows Live Hotmail web site. BTW I always use latest version of Firefox.
&lt;/p&gt;

&lt;p&gt;I can live with that annoying message but couple of time I got that screen while I was sending the message and I lost my composed message because there is no continue button or link which can take you back to what you
were doing.&lt;/p&gt;&lt;p&gt;&lt;img src="http://weblogs.asp.net/blogs/jigardesai/Upgrade_Your_Browser.gif" title="Upgrade Your Browser" alt="Upgrade Your Browser" mce_src="http://weblogs.asp.net/blogs/jigardesai/Upgrade_Your_Browser.gif" width="688" height="591"&gt;&amp;nbsp;&lt;/p&gt;

&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6800071" width="1" height="1"&gt;</content><author><name>jigar</name><uri>http://weblogs.asp.net/members/jigar.aspx</uri></author><category term="BUGS" scheme="http://weblogs.asp.net/jigardesai/archive/tags/BUGS/default.aspx" /></entry><entry><title>Create your own light weight IOC container in .NET</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jigardesai/archive/2008/11/06/create-your-own-light-weight-ioc-container-in-net.aspx" /><id>http://weblogs.asp.net/jigardesai/archive/2008/11/06/create-your-own-light-weight-ioc-container-in-net.aspx</id><published>2008-11-06T14:23:00Z</published><updated>2008-11-06T14:23:00Z</updated><content type="html">		&lt;p&gt;
				&lt;a href="http://weblogs.asp.net/blogs/jigardesai/IOC_Container/Jigar.Infrastructure.zip" mce_href="http://weblogs.asp.net/blogs/jigardesai/IOC_Container/Jigar.Infrastructure.zip"&gt;Download Source Code&lt;/a&gt;
		&lt;/p&gt;
		&lt;p&gt;There are lots of very good IOC container out there like Spring.Net and Castle Windsor, however the size of those frameworks makes me nervous specially when I have a small project and I do not need all those bells and whistles that comes with those frameworks.  Following post will show you how to create and use simple IOC container.&lt;/p&gt;
		&lt;p&gt;The two most important features that I need in my all projects is Service Locator and Object Resolver. In short I need a container which gives me implementation of specified interface or abstract class based on the configuration and/or convention.&lt;/p&gt;
		&lt;h2&gt;What do I need from a container?&lt;/h2&gt;
		&lt;p&gt;I need a simple Resolve&lt;t&gt; method which can either take interface or abstract class as a generic T parameter and return implementation based on my configuration and conventions. 
		&lt;/t&gt;&lt;/p&gt;
		&lt;div class="code"&gt;
				&lt;font color="blue"&gt;public&amp;nbsp;static&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;T&amp;nbsp;Resolve&amp;lt;t&amp;gt;()&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&lt;br&gt;&lt;/font&gt;
		&lt;/div&gt;
		&lt;h2&gt;Configuration and Convention.&lt;/h2&gt;
		&lt;p&gt;Following is the sample configuration xml that defines mappings between the contracts and implementation.&lt;/p&gt;
		&lt;div class="code"&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;component&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;contract&lt;/font&gt;
				&lt;font color="blue"&gt;="MyServiceBase,&amp;nbsp;MyLibrary"&lt;/font&gt;
				&lt;font color="red"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&lt;/font&gt;
				&lt;font color="blue"&gt;="MyServiceConcrete,&amp;nbsp;MyImplementationLibrary"&lt;/font&gt;
				&lt;font color="red"&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;singleton&lt;/font&gt;
				&lt;font color="blue"&gt;="false"/&amp;gt;&lt;br&gt;&lt;br&gt;&lt;/font&gt;
		&lt;/div&gt;
		&lt;p&gt;Contract is the
fully qualified type name of your interface or abstract class and
implementation is the fully qualified type name of the class that implements
the contract. Additionally you may specify lifecycle of implementation by
defining singleton to true or false, by default singleton is true.&lt;/p&gt;
		&lt;p&gt;
As shown in the flow diagram Resolve method
will look into configuration for request. If it does not find in configuration
then it will look into loaded assemblies for the class that implements contract
and finally it will look into local assemblies.&lt;/p&gt;
		&lt;p&gt;
				&lt;img src="http://weblogs.asp.net/blogs/jigardesai/IOC_Container/IOC_Flow_Diagram.JPG" title="IOC Process Flow" alt="IOC Process Flow" mce_src="http://weblogs.asp.net/blogs/jigardesai/IOC_Container/IOC_Flow_Diagram.JPG" width="400" height="593"&gt;
		&lt;/p&gt;
		&lt;h2&gt;Component Class&lt;/h2&gt;
		&lt;p&gt;
Component class encapsulates information about implementation, we have three properties  ImplementationType, ImplementationInstance and IsSingleton.&lt;/p&gt;
		&lt;img src="http://weblogs.asp.net/blogs/jigardesai/IOC_Container/component-Class.gif" mce_src="http://weblogs.asp.net/blogs/jigardesai/IOC_Container/component-Class.gif"&gt;
		&lt;h2&gt;IOC Container&lt;/h2&gt;
		&lt;div class="code"&gt;
				&lt;font color="blue"&gt;public&amp;nbsp;static&amp;nbsp;class&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;IOCContainer&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;private&amp;nbsp;static&amp;nbsp;readonly&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;Dictionary&amp;lt;Type,&amp;nbsp;Component&amp;gt;&amp;nbsp;objectDictionary&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;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;Dictionary&amp;lt;Type,Component&amp;gt;()&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;static&amp;nbsp;bool&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;loaded&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;false;&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;T&amp;nbsp;Resolve&amp;lt;T&amp;gt;()&amp;nbsp;where&amp;nbsp;T:&lt;/font&gt;
				&lt;font color="blue"&gt;class&lt;/font&gt;
				&lt;font color="black"&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;Type&amp;nbsp;requestedType&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;typeof&lt;/font&gt;
				&lt;font color="black"&gt;(T)&lt;/font&gt;
				&lt;font color="blue"&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;&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;if&lt;/font&gt;
				&lt;font color="black"&gt;(!loaded)&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;nbsp;loadConfiguration()&lt;/font&gt;
				&lt;font color="blue"&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;&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;if&lt;/font&gt;
				&lt;font color="black"&gt;(objectDictionary.ContainsKey(requestedType)){&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;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;return&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;getImplementionFromComponent&amp;lt;T&amp;gt;(objectDictionary[requestedType])&lt;/font&gt;
				&lt;font color="blue"&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;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&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;&lt;/font&gt;
				&lt;font color="blue"&gt;if&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;(loadFromLoadedAssemblies&amp;lt;T&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;{&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;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;return&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;getImplementionFromComponent&amp;lt;T&amp;gt;(objectDictionary[requestedType])&lt;/font&gt;
				&lt;font color="blue"&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;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;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&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;&lt;/font&gt;
				&lt;font color="blue"&gt;if&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;(loadFromLocalAssemblies&amp;lt;T&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;{&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;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;return&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;getImplementionFromComponent&amp;lt;T&amp;gt;(objectDictionary[requestedType])&lt;/font&gt;
				&lt;font color="blue"&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;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&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;Trace.TraceWarning(&lt;/font&gt;
				&lt;font color="#808080"&gt;"{0}&amp;nbsp;not&amp;nbsp;found"&lt;/font&gt;
				&lt;font color="black"&gt;,&amp;nbsp;requestedType.Name)&lt;/font&gt;
				&lt;font color="blue"&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;return&amp;nbsp;null;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;private&amp;nbsp;static&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;T&amp;nbsp;getImplementionFromComponent&amp;lt;T&amp;gt;(Component&amp;nbsp;c)&lt;br&gt;
&amp;nbsp;&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;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;if&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;(!c.Singleton)&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;{&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;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;return&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;(T)Activator.CreateInstance(c.ImplementationType)&lt;/font&gt;
				&lt;font color="blue"&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;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&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;&lt;/font&gt;
				&lt;font color="blue"&gt;return&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;(T)c.ImplementationInstance&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;…..&lt;br&gt;
}&lt;/font&gt;
		&lt;/div&gt;
		&lt;p&gt;As you can see we have a dictionary to store contract and their corresponding implementations, on first request we are going to load information from configuration and consecutive request will get instance from dictionary. You will also notice that based on your configuration setting you will get singleton or transient instance of contract implementation. For the reason of brevity I am not showing here methods to load configuration and method to load from assembly.&lt;/p&gt;
		&lt;h2&gt;Source code and Usage.&lt;/h2&gt;
		&lt;p&gt;Attached Source code contains IOCContainer and a TestProject, if you want to use IOCContainer in your project then you will have to add reference to IOCContainer dll and following configuraiton section in your  App.config or Web.config file.&lt;/p&gt;
		&lt;div class="code"&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;configuration&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;configSections&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;section&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;name&lt;/font&gt;
				&lt;font color="blue"&gt;="IOCConfiguration"&lt;/font&gt;
				&lt;font color="red"&gt;&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;nbsp;&amp;nbsp;type&lt;/font&gt;
				&lt;font color="blue"&gt;="Jigar.Infrastructure.IOCCOntainerConfigurationSectionHandler&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;,Jigar.Infrastructure"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;configSections&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
						&lt;br&gt;
				&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;IOCConfiguration&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;component&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;contract&lt;/font&gt;
				&lt;font color="blue"&gt;="IMyService,&amp;nbsp;MyLibrary"&lt;/font&gt;
				&lt;font color="red"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&lt;/font&gt;
				&lt;font color="blue"&gt;="MyServiceImplementation,&amp;nbsp;MyImplementationLibrary"&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;/&amp;gt;&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;component&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;contract&lt;/font&gt;
				&lt;font color="blue"&gt;="MyServiceBase,&amp;nbsp;MyLibrary"&lt;/font&gt;
				&lt;font color="red"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&lt;/font&gt;
				&lt;font color="blue"&gt;="MyServiceConcrete,&amp;nbsp;MyImplementationLibrary"&lt;/font&gt;
				&lt;font color="red"&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;singleton&lt;/font&gt;
				&lt;font color="blue"&gt;="false"/&amp;gt;&lt;br&gt;
&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;IOCConfiguration&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
				&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;configuration&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;br&gt;&lt;br&gt;&lt;/font&gt;
				&lt;div&gt;
						&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;Based on the above
configuration you can use following methods to resolve your service.&lt;/p&gt;
						&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt;"&gt;&amp;nbsp;&lt;/p&gt;
						&lt;div class="code"&gt;
								&lt;font color="darkgreen"&gt;//&amp;nbsp;following&amp;nbsp;will&amp;nbsp;return&amp;nbsp;singleton&amp;nbsp;instance&amp;nbsp;of&amp;nbsp;MyServiceImplementation&lt;br&gt;&lt;/font&gt;
								&lt;font color="black"&gt;IMyService&amp;nbsp;myService&amp;nbsp;&lt;/font&gt;
								&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
								&lt;font color="black"&gt;IOCContainer&amp;lt;IMyService&amp;gt;()&lt;/font&gt;
								&lt;font color="blue"&gt;;&lt;br&gt;&lt;br&gt;&lt;/font&gt;
								&lt;font color="darkgreen"&gt;//&amp;nbsp;following&amp;nbsp;will&amp;nbsp;return&amp;nbsp;Transients&amp;nbsp;instance&amp;nbsp;of&amp;nbsp;MyServiceConcrete&lt;br&gt;&lt;/font&gt;
								&lt;font color="black"&gt;MyServiceBase&amp;nbsp;serviceBase&amp;nbsp;&lt;/font&gt;
								&lt;font color="blue"&gt;=&amp;nbsp;&amp;nbsp;&lt;/font&gt;
								&lt;font color="black"&gt;IOCContainer&amp;lt;MyServiceBase&amp;nbsp;&amp;gt;()&lt;/font&gt;
								&lt;font color="blue"&gt;;&lt;br&gt;&lt;br&gt;&lt;/font&gt;
								&lt;font color="darkgreen"&gt;//&amp;nbsp;if&amp;nbsp;you&amp;nbsp;&amp;nbsp;implementaion&amp;nbsp;of&amp;nbsp;IDynamicService&amp;nbsp;in&amp;nbsp;your&amp;nbsp;loaded&amp;nbsp;assemblies&amp;nbsp;or &lt;br&gt;// local&amp;nbsp;assemblies following&amp;nbsp;method&amp;nbsp;will&amp;nbsp;return&amp;nbsp;first&amp;nbsp;available&amp;nbsp;instance&amp;nbsp;of&amp;nbsp;class &lt;br&gt;// which&amp;nbsp;implements&amp;nbsp;IDynamicService&lt;br&gt;&lt;/font&gt;
								&lt;font color="black"&gt;IDynamicService&amp;nbsp;service&amp;nbsp;&lt;/font&gt;
								&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
								&lt;font color="black"&gt;IOCContainer&amp;lt;IDynamicService&amp;gt;()&lt;/font&gt;
								&lt;font color="blue"&gt;;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/font&gt;
						&lt;/div&gt;
				&lt;/div&gt;
		&lt;/div&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6723534" width="1" height="1"&gt;</content><author><name>jigar</name><uri>http://weblogs.asp.net/members/jigar.aspx</uri></author><category term="ASP.Net" scheme="http://weblogs.asp.net/jigardesai/archive/tags/ASP.Net/default.aspx" /><category term="IOC" scheme="http://weblogs.asp.net/jigardesai/archive/tags/IOC/default.aspx" /><category term=".Net" scheme="http://weblogs.asp.net/jigardesai/archive/tags/.Net/default.aspx" /></entry><entry><title>Need for Light Weight View engine from Microsoft and Evil of Codebehind in ASP.net MVC.  </title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jigardesai/archive/2008/11/05/need-for-light-weight-view-engine-from-microsoft-and-evil-of-codebehind-in-asp-net-mvc.aspx" /><id>http://weblogs.asp.net/jigardesai/archive/2008/11/05/need-for-light-weight-view-engine-from-microsoft-and-evil-of-codebehind-in-asp-net-mvc.aspx</id><published>2008-11-05T20:48:00Z</published><updated>2008-11-05T20:48:00Z</updated><content type="html">&lt;p&gt;Some how I had an impression in my mind that current version of ViewEngine was just a temporary solution until Asp.Net MVC reaches to Beta stage. It seems now that current version is going to be final at least for V1. If you are like me who do not like ViewPage,  then you will have to relay on MVC Contrib for either Brail or NVelocity.&lt;/p&gt;

&lt;h2&gt;What is wrong in using current version of ViewPage?&lt;/h2&gt;

&lt;p&gt;I always thought of Web application MVC View as a light weight template engine capable of sending gestures back to controller. Current Version of ViewPage interits from Page class and includes all lifecycle events that are not necessary in MVC View. I cannot imagine my self using ViewPage in real world complex application with multiple partials.&lt;/p&gt;

&lt;h2&gt;Why do we need light weight ViewEngine from Microsoft team when similar implementation are available from MVC contrib?&lt;/h2&gt;

&lt;p&gt;Its very difficult to convince architecture committee in big companies to use the piece of software that comes from open source world, more so when alternate version from Microsoft is available with full support.&lt;/p&gt;

&lt;p&gt;Most of the Microsoft developers will find themselves more comfortable with the ViewEngine that supports CLR languages rather then Brail or NVeloicity.&lt;/p&gt;

&lt;h2&gt;Evil of code behind in view&lt;/h2&gt;
&lt;p&gt;We continue to see lot of Asp.net MVC samples from MS team which uses code behind in View,  Although in most of those cases code behind files are empty they do clutter solution with unnecessary file and gives wrong impression to developer community.&lt;/p&gt;

&lt;p&gt;Code Behind in a View can easily promote bad design specially when most of the developers are coming from traditional asp.net development and are still learning MVC concepts. Making Code Behind file available to developer has potential risk of promoting them to write business logic or even make service call directly from Code Behind.&lt;/p&gt;

&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6722087" width="1" height="1"&gt;</content><author><name>jigar</name><uri>http://weblogs.asp.net/members/jigar.aspx</uri></author><category term="ASP.Net MVC" scheme="http://weblogs.asp.net/jigardesai/archive/tags/ASP.Net+MVC/default.aspx" /><category term="ASP.Net" scheme="http://weblogs.asp.net/jigardesai/archive/tags/ASP.Net/default.aspx" /><category term="ViewPage." scheme="http://weblogs.asp.net/jigardesai/archive/tags/ViewPage_2E00_/default.aspx" /></entry><entry><title>Display Live Data In Silverlight Using ObservableCollection and INotifyPropertyChanged</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jigardesai/archive/2008/11/02/display-live-data-in-silverlight-using-observablecollection-and-inotifypropertychanged.aspx" /><link rel="enclosure" type="application/zip" length="1242561" href="http://weblogs.asp.net/jigardesai/attachment/6716156.ashx" /><id>http://weblogs.asp.net/jigardesai/archive/2008/11/02/display-live-data-in-silverlight-using-observablecollection-and-inotifypropertychanged.aspx</id><published>2008-11-02T15:51:00Z</published><updated>2008-11-02T15:51:00Z</updated><content type="html">		
&lt;p&gt;
				&lt;a href="http://weblogs.asp.net/jigardesai/attachment/6716156.ashx" mce_href="http://weblogs.asp.net/jigardesai/attachment/6716156.ashx"&gt;Download Source Code&lt;/a&gt; | &lt;a href="http://www.jigar.net/demo/SLObservableCollectionSample.htm" mce_href="http://www.jigar.net/demo/SLObservableCollectionSample.htm"&gt;Run Sample&lt;/a&gt;&lt;/p&gt;
		
&lt;p&gt;Articles shows how to use ObservableCollection in combination with an object implementing INotifyPropertyChanged interface to display live data in Silverlight Application.&lt;/p&gt;
		
&lt;p&gt;
ObservableCollection is a generic dynamic data collection that provides notifications when items get added, removed, or when the whole list is refreshed and INotifyPropertyChanged provides PropertyChanged notification to clients when any property value gets changed. 
&lt;/p&gt;
		&lt;h2&gt;Sample Application in Nutshell&lt;/h2&gt;
		
&lt;p&gt;
We are going to create a simple Silverlight Application which show DataGrid with user names and their respective scores, we will also create a simple Column Chart to display same user data. We will set ItemSource of both control  to the same instance of ObservableCollection and finally we will create timer which will randomly update ObservableCollection by adding new row or updating score for random users.
&lt;/p&gt;
		&lt;h2&gt;User Class.&lt;/h2&gt;
		
&lt;p&gt;
As you can see User Class implements INotifyPropertyChange interface, INotifyPropertyChange defines PropertyChanged Event which notifies subscriber on any change in properties, This is very important if you do not implement INotifyPropertyChange interface then any change in your property will not trigger updates in either datagrid and chart.
&lt;/p&gt;
		&lt;div class="code"&gt;
				&lt;font color="blue"&gt;public&amp;nbsp;class&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;User&amp;nbsp;:&amp;nbsp;INotifyPropertyChanged{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;private&amp;nbsp;string&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;name&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;string&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;Name{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;get&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;{&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;return&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;name&lt;/font&gt;
				&lt;font color="blue"&gt;;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;set&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&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;&lt;/font&gt;
				&lt;font color="blue"&gt;if&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;(&lt;/font&gt;
				&lt;font color="blue"&gt;value&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;!&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;value;&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;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;onPropertyChanged(&lt;/font&gt;
				&lt;font color="blue"&gt;this&lt;/font&gt;
				&lt;font color="black"&gt;,&amp;nbsp;&lt;/font&gt;
				&lt;font color="#808080"&gt;"Name"&lt;/font&gt;
				&lt;font color="black"&gt;)&lt;/font&gt;
				&lt;font color="blue"&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;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&gt;
&amp;nbsp;&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;}&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;private&amp;nbsp;long&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;score&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;long&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;Score{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;get&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;{&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;return&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;score&lt;/font&gt;
				&lt;font color="blue"&gt;;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;set&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&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;&lt;/font&gt;
				&lt;font color="blue"&gt;if&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;(score&amp;nbsp;!&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;value&lt;/font&gt;
				&lt;font color="black"&gt;)&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;score&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;value;&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;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;onPropertyChanged(&lt;/font&gt;
				&lt;font color="blue"&gt;this&lt;/font&gt;
				&lt;font color="black"&gt;,&amp;nbsp;&lt;/font&gt;
				&lt;font color="#808080"&gt;"Score"&lt;/font&gt;
				&lt;font color="black"&gt;)&lt;/font&gt;
				&lt;font color="blue"&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;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&gt;
&amp;nbsp;&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;}&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;#region&lt;/font&gt;
				&lt;font color="black"&gt;&amp;nbsp;INotifyPropertyChanged&amp;nbsp;Members&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;public&amp;nbsp;event&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;PropertyChangedEventHandler&amp;nbsp;PropertyChanged&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;void&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;onPropertyChanged(&lt;/font&gt;
				&lt;font color="blue"&gt;object&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;sender&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;string&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;propertyName){&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;if&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;(&lt;/font&gt;
				&lt;font color="blue"&gt;this&lt;/font&gt;
				&lt;font color="black"&gt;.PropertyChanged&amp;nbsp;!&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;null&lt;/font&gt;
				&lt;font color="black"&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;PropertyChanged(sender,&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;new&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;PropertyChangedEventArgs(propertyName))&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;#endregion&lt;br&gt;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&gt;&lt;br&gt;&lt;/font&gt;
		&lt;/div&gt;
		&lt;h2&gt;Observable Collection of User&lt;/h2&gt;
		
&lt;p&gt;As I mentioned earlier ObservableCollection implements INotifyCollectionChanged interface which defines CollectionChanged event which notifies subscribers on any change in collection, Unless you use ObservableCollection or custom class which implements INotifyCollectionChanged,  updates that you make in collection will not trigger update in either datagrid or chart.&lt;/p&gt;
		&lt;div class="code"&gt;
				&lt;font color="black"&gt;ObservableCollection&amp;lt;User&amp;gt;&amp;nbsp;getUserCollection()&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ObservableCollection&amp;lt;User&amp;gt;&amp;nbsp;rVal&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;ObservableCollection&amp;lt;User&amp;gt;()&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;rVal.Add(&lt;/font&gt;
				&lt;font color="blue"&gt;new&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;User&amp;nbsp;{&amp;nbsp;Name&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
				&lt;font color="#808080"&gt;"Tom"&lt;/font&gt;
				&lt;font color="black"&gt;,&amp;nbsp;Score&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
				&lt;font color="maroon"&gt;2&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;})&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;rVal.Add(&lt;/font&gt;
				&lt;font color="blue"&gt;new&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;User&amp;nbsp;{&amp;nbsp;Name&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
				&lt;font color="#808080"&gt;"Sam"&lt;/font&gt;
				&lt;font color="black"&gt;,&amp;nbsp;Score&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
				&lt;font color="maroon"&gt;3&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;})&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;rVal.Add(&lt;/font&gt;
				&lt;font color="blue"&gt;new&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;User&amp;nbsp;{&amp;nbsp;Name&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
				&lt;font color="#808080"&gt;"John"&lt;/font&gt;
				&lt;font color="black"&gt;,&amp;nbsp;Score&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
				&lt;font color="maroon"&gt;4&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;})&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;rVal.Add(&lt;/font&gt;
				&lt;font color="blue"&gt;new&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;User&amp;nbsp;{&amp;nbsp;Name&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
				&lt;font color="#808080"&gt;"Dave"&lt;/font&gt;
				&lt;font color="black"&gt;,&amp;nbsp;Score&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
				&lt;font color="maroon"&gt;5&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;})&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;rVal.Add(&lt;/font&gt;
				&lt;font color="blue"&gt;new&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;User&amp;nbsp;{&amp;nbsp;Name&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
				&lt;font color="#808080"&gt;"Sue"&lt;/font&gt;
				&lt;font color="black"&gt;,&amp;nbsp;Score&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
				&lt;font color="maroon"&gt;1&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;})&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;rVal&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;/font&gt;
		&lt;/div&gt;
		&lt;h2&gt;
				&lt;br&gt;
		&lt;/h2&gt;
		&lt;h2&gt;XAML Layout and Databinding.&lt;/h2&gt;
		
&lt;p&gt;We have a very simple XAML layout which includes DataGrid in top and Charting Control in bottom, Charting control has one ColumnSeries without any data.&lt;/p&gt;
		&lt;div class="code"&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;Grid&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;x:Name&lt;/font&gt;
				&lt;font color="blue"&gt;="LayoutRoot"&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;Background&lt;/font&gt;
				&lt;font color="blue"&gt;="White"&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;Grid.RowDefinitions&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&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;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;RowDefinition&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;Height&lt;/font&gt;
				&lt;font color="blue"&gt;="*"&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;/&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;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;RowDefinition&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;Height&lt;/font&gt;
				&lt;font color="blue"&gt;="300"&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;Grid.RowDefinitions&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;data:DataGrid&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;x:Name&lt;/font&gt;
				&lt;font color="blue"&gt;="dataGrid"&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;Grid.Row&lt;/font&gt;
				&lt;font color="blue"&gt;="0"&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;&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;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;data:DataGrid&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;charting:Chart&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;x:Name&lt;/font&gt;
				&lt;font color="blue"&gt;="chartControl"&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;Grid.Row&lt;/font&gt;
				&lt;font color="blue"&gt;="1"&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;Title&lt;/font&gt;
				&lt;font color="blue"&gt;="Live&amp;nbsp;Chart"&amp;gt;&lt;/font&gt;
				&lt;font color="black"&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;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;charting:Chart.Series&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&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;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;charting:ColumnSeries&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;DependentValueBinding&lt;/font&gt;
				&lt;font color="blue"&gt;="{Binding&amp;nbsp;Score}"&lt;/font&gt;
				&lt;font color="red"&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;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;IndependentValueBinding&lt;/font&gt;
				&lt;font color="blue"&gt;="{Binding&amp;nbsp;Name}"&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;/&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;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;charting:Chart.Series&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;charting:Chart&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;Grid&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
				&lt;/font&gt;
		&lt;/div&gt;
		
&lt;p&gt;We will use constructor to bind our data to datagrid and chart, we are also creating a timer which starts after 10 seconds and ticks every 2 second, we are going to randomly change data and add or remove row in collection whenever timer event fires.&lt;/p&gt;
		&lt;div class="code"&gt;
				&lt;font color="black"&gt;ObservableCollection&amp;lt;User&amp;gt;&amp;nbsp;users&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;
&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;Timer&amp;nbsp;timer&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;public&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;Page()&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;&amp;nbsp;InitializeComponent()&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&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;&lt;/font&gt;
				&lt;font color="black"&gt;users&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;getUserCollection()&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&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;this&lt;/font&gt;
				&lt;font color="black"&gt;.dataGrid.ItemsSource&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;users&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&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;&lt;/font&gt;
				&lt;font color="black"&gt;((DynamicSingleSeriesWithAxes)&lt;/font&gt;
				&lt;font color="blue"&gt;this&lt;/font&gt;
				&lt;font color="black"&gt;.chartControl.Series[&lt;/font&gt;
				&lt;font color="maroon"&gt;0&lt;/font&gt;
				&lt;font color="black"&gt;]).ItemsSource&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;users&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&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;&lt;/font&gt;
				&lt;font color="black"&gt;timer&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;Timer(timerFired,&lt;/font&gt;
				&lt;font color="blue"&gt;null&lt;/font&gt;
				&lt;font color="black"&gt;,&lt;/font&gt;
				&lt;font color="maroon"&gt;10000&lt;/font&gt;
				&lt;font color="black"&gt;,&lt;/font&gt;
				&lt;font color="maroon"&gt;5000&lt;/font&gt;
				&lt;font color="black"&gt;)&lt;/font&gt;
				&lt;font color="blue"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&gt;&lt;/font&gt;
		&lt;/div&gt;
		&lt;h2&gt;
				&lt;br&gt;
		&lt;/h2&gt;
		&lt;h2&gt;Updating Data&lt;/h2&gt;
		
&lt;p&gt;Very important thing to note here is the way in which we have to make updates to our datasource when we are not in UI thread, if you are familiar with Winforms development then you should be familiar with cross-thread access exception when you try to update UI element from another thread. Similar to windows development you will have to use BeginInvoke to make any updates to UI Element or In our case object which can trigger change in UI Element.&lt;/p&gt;
		&lt;div class="code"&gt;
				&lt;font color="blue"&gt;void&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;timerFired(&lt;/font&gt;
				&lt;font color="blue"&gt;object&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;state){&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;this&lt;/font&gt;
				&lt;font color="black"&gt;.Dispatcher.BeginInvoke(&lt;/font&gt;
				&lt;font color="blue"&gt;delegate&lt;/font&gt;
				&lt;font color="black"&gt;(){&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Random&amp;nbsp;rnd&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;Random()&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;users[rnd.Next(&lt;/font&gt;
				&lt;font color="maroon"&gt;0&lt;/font&gt;
				&lt;font color="black"&gt;,users.Count)].Score&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;rnd.Next(&lt;/font&gt;
				&lt;font color="maroon"&gt;1&lt;/font&gt;
				&lt;font color="black"&gt;,&amp;nbsp;&lt;/font&gt;
				&lt;font color="maroon"&gt;5&lt;/font&gt;
				&lt;font color="black"&gt;)&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;(rnd.Next(&lt;/font&gt;
				&lt;font color="maroon"&gt;1&lt;/font&gt;
				&lt;font color="black"&gt;,&amp;nbsp;&lt;/font&gt;
				&lt;font color="maroon"&gt;5&lt;/font&gt;
				&lt;font color="black"&gt;)&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/font&gt;
				&lt;font color="maroon"&gt;3&lt;/font&gt;
				&lt;font color="black"&gt;)&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;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;if&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;(users.Count&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/font&gt;
				&lt;font color="maroon"&gt;4&lt;/font&gt;
				&lt;font color="black"&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;nbsp;users.RemoveAt(&lt;/font&gt;
				&lt;font color="maroon"&gt;4&lt;/font&gt;
				&lt;font color="black"&gt;)&lt;/font&gt;
				&lt;font color="blue"&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;&lt;/font&gt;
				&lt;font color="black"&gt;}&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;else&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&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;nbsp;users.Add(&lt;/font&gt;
				&lt;font color="blue"&gt;new&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;User&amp;nbsp;{&amp;nbsp;Name&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
				&lt;font color="#808080"&gt;"Sue"&lt;/font&gt;
				&lt;font color="black"&gt;,&amp;nbsp;Score&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
				&lt;font color="maroon"&gt;1&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;})&lt;/font&gt;
				&lt;font color="blue"&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;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&gt;
&amp;nbsp;&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;})&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;
&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;/font&gt;
		&lt;/div&gt;
		
&lt;p&gt;We are randomly selecting a row in collection and updating its score,  along with that we are also randomly adding or removing row from the collection. Although we are not rebinding our data with DataGrid or Chart they both with immediately get updated whenever source changes.&lt;/p&gt;
		&lt;img src="http://weblogs.asp.net/blogs/jigardesai/silverlight_Chart.gif" mce_src="http://weblogs.asp.net/blogs/jigardesai/silverlight_Chart.gif" width="602" height="397"&gt;&lt;br&gt;
		&lt;h2&gt;Closing Notes&lt;/h2&gt;
		
&lt;p&gt;You also get two way binding with INotifyPropertyChanged and DataGrid without adding single line of additional code, if you update Score or Name in DataGrid change will immediately 
trigger in change Chart Control.&lt;/p&gt;

&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6716156" width="1" height="1"&gt;</content><author><name>jigar</name><uri>http://weblogs.asp.net/members/jigar.aspx</uri></author><category term="ASP.Net" scheme="http://weblogs.asp.net/jigardesai/archive/tags/ASP.Net/default.aspx" /><category term="DataBinding" scheme="http://weblogs.asp.net/jigardesai/archive/tags/DataBinding/default.aspx" /><category term="Charting" scheme="http://weblogs.asp.net/jigardesai/archive/tags/Charting/default.aspx" /><category term="Sliverlight" scheme="http://weblogs.asp.net/jigardesai/archive/tags/Sliverlight/default.aspx" /></entry><entry><title>Authorization in ASP.Net MVC using XML Configuration.</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jigardesai/archive/2008/10/30/authorization-in-asp-net-mvc-using-xml-configuration.aspx" /><link rel="enclosure" type="application/zip" length="241946" href="http://weblogs.asp.net/jigardesai/attachment/6713202.ashx" /><id>http://weblogs.asp.net/jigardesai/archive/2008/10/30/authorization-in-asp-net-mvc-using-xml-configuration.aspx</id><published>2008-10-31T00:22:00Z</published><updated>2008-10-31T00:22:00Z</updated><content type="html">&lt;p&gt;&lt;a href="http://weblogs.asp.net/jigardesai/attachment/6713202.ashx" mce_href="http://weblogs.asp.net/jigardesai/attachment/6713202.ashx"&gt;Download Source Code&lt;/a&gt; &lt;br&gt;&lt;/p&gt;&lt;p&gt;Doing authorization in a clean way is always tricky, You want a delicate balance
between an extreme abstraction and something like embedding roles in-side your
compiled code, I have always preferred simple abstraction either using
roles and their corresponding mappings in the database or using simple
xml file to store action to role mappings.&lt;/p&gt;
		&lt;p&gt;
Asp.net MVC comes with built in Authorization filter attribute that you
can use on your Controller and Action to define the role that can
access corresponding Controller or Action. This approach will work fine
for small application where you have predefined action to role
mappings, but when you have bigger application where developers are not
going to define role mappings and mappings might change frequently then
maintenance of hard quoted roles might become nightmare.&lt;/p&gt;
		&lt;p&gt;
I have created simple application to demonstrate how you can xml based
configuration to apply authorization in MVC application. Following are
four major pieces of the application.&lt;/p&gt;
		&lt;ul&gt;&lt;li&gt;ConfigurationSectionHandler for defining XML Configuration for Controller and Action to role mapping. &lt;/li&gt;&lt;li&gt;IMVCAuthorizer Interface and implementation MCVXMLAuthorizer. &lt;/li&gt;&lt;li&gt;HttpModule which plugs into AuthorizeRequest event to validate if user are authorized to access Controller and Action. &lt;/li&gt;&lt;li&gt;Sample MVC application to test XMLAuthorizer. &lt;/li&gt;&lt;/ul&gt;
		&lt;h2&gt;Defining XML and Configuration Section.&lt;/h2&gt;
		&lt;p&gt;
Following is the XML structure that defines Controller and Action to
role mappings, As you can see Controller and Actions can have their own
set of roles. Empty Home Controller section means everybody has access
to Controller and all Actions. &lt;br&gt;&lt;/p&gt;
		&lt;p&gt;As
you can also see in first controller node Admin, Edit and View roles
have access to Admin Controller but access to Edit and Admin action if
limited to specific roles only.
&lt;/p&gt;
		&lt;div class="code"&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;controllers&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;controller&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;name&lt;/font&gt;
				&lt;font color="blue"&gt;="Admin"&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;roles&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;role&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;Admin&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;role&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;role&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;Edit&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;role&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;role&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;View&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;role&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;roles&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;actions&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;action&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;name&lt;/font&gt;
				&lt;font color="blue"&gt;="Index"&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;roles&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;role&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;Admin&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;role&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;role&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;Edit&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;role&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;role&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;View&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;role&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;roles&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;action&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;action&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;name&lt;/font&gt;
				&lt;font color="blue"&gt;="Edit"&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;roles&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;role&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;Edit&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;role&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;role&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;Admin&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;role&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;roles&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;action&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;action&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;name&lt;/font&gt;
				&lt;font color="blue"&gt;="Admin"&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;roles&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;role&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;Admin&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;role&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;roles&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;action&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;actions&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;controller&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;controller&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;name&lt;/font&gt;
				&lt;font color="blue"&gt;="Home"&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
				&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;controller&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
				&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;controllers&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;&amp;nbsp;&lt;/font&gt;
		&lt;/div&gt;
		&lt;br&gt;
		&lt;br&gt;Configuration
Section handler has two important properties 1) Type which defines
fully qualified type name of class implements IXMLAuthorizer interface
and 2) ConnectionString which in our case is the path of
XMLConfiguration file, additionally It also has static
GetSettingsMethod which returns current settings from Web.Config file.&lt;br&gt;&lt;br&gt;&lt;div class="code"&gt;&lt;font color="blue"&gt;public&amp;nbsp;class&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;AuthorizationMappingSection&amp;nbsp;:&amp;nbsp;IConfigurationSectionHandler&amp;nbsp;{&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&amp;nbsp;object&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;Create(&lt;/font&gt;&lt;font color="blue"&gt;object&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;parent,&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;object&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;configContext,&amp;nbsp;System.Xml.XmlNode&amp;nbsp;section)&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;nbsp;&lt;/font&gt;&lt;font color="darkgreen"&gt;//&amp;nbsp;Create&amp;nbsp;an&amp;nbsp;instance&amp;nbsp;of&amp;nbsp;XmlSerializer&amp;nbsp;based&amp;nbsp;on&amp;nbsp;the&amp;nbsp;RewriterConfiguration&amp;nbsp;type...&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;&lt;/font&gt;&lt;font color="black"&gt;XmlSerializer&amp;nbsp;ser&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;XmlSerializer(&lt;/font&gt;&lt;font color="blue"&gt;typeof&lt;/font&gt;&lt;font color="black"&gt;(AuthorizationMappingSection))&lt;/font&gt;&lt;font color="blue"&gt;;&lt;br&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;&lt;/font&gt;&lt;font color="darkgreen"&gt;//&amp;nbsp;Return&amp;nbsp;the&amp;nbsp;Deserialized&amp;nbsp;object&amp;nbsp;from&amp;nbsp;the&amp;nbsp;Web.config&amp;nbsp;XML&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;&lt;/font&gt;&lt;font color="blue"&gt;return&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;ser.Deserialize(&lt;/font&gt;&lt;font color="blue"&gt;new&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;XmlNodeReader(section))&lt;/font&gt;&lt;font color="blue"&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;}&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&amp;nbsp;static&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;AuthorizationMappingSection&amp;nbsp;GetSettings()&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;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;if&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;(HttpContext.Current.Cache[&lt;/font&gt;&lt;font color="#808080"&gt;"AuthorizationMappingSection"&lt;/font&gt;&lt;font color="black"&gt;]&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;==&amp;nbsp;null&lt;/font&gt;&lt;font color="black"&gt;)&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AuthorizationMappingSection&amp;nbsp;settings&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;(AuthorizationMappingSection)ConfigurationManager.GetSection(&lt;/font&gt;&lt;font color="#808080"&gt;"AuthorizationMappingSection"&lt;/font&gt;&lt;font color="black"&gt;)&lt;/font&gt;&lt;font color="blue"&gt;;&lt;br&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;nbsp;&lt;/font&gt;&lt;font color="black"&gt;HttpContext.Current.Cache[&lt;/font&gt;&lt;font color="#808080"&gt;"AuthorizationMappingSection"&lt;/font&gt;&lt;font color="black"&gt;]&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;settings&lt;/font&gt;&lt;font color="blue"&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;&lt;/font&gt;&lt;font color="black"&gt;}&lt;br&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;&lt;/font&gt;&lt;font color="blue"&gt;return&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;((AuthorizationMappingSection)HttpContext.Current.Cache[&lt;/font&gt;&lt;font color="#808080"&gt;"AuthorizationMappingSection"&lt;/font&gt;&lt;font color="black"&gt;])&lt;/font&gt;&lt;font color="blue"&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;}&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[XmlAttribute(&lt;/font&gt;&lt;font color="#808080"&gt;"type"&lt;/font&gt;&lt;font color="black"&gt;)]&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&amp;nbsp;string&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;Type&amp;nbsp;{&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;get;&amp;nbsp;set;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;}&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[XmlAttribute(&lt;/font&gt;&lt;font color="#808080"&gt;"connectionString"&lt;/font&gt;&lt;font color="black"&gt;)]&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&amp;nbsp;string&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;ConnectionString&amp;nbsp;{&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;get;&amp;nbsp;set;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;}&lt;br&gt;
}&lt;/font&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;h2&gt;IMVCAuthorizer and MCVXMLAuthorizer Implementation.&lt;/h2&gt;
IMVCAuthorizer interface has two methods, 1) IsAuthorized which takes
controllerName and actionName and Principle object. And 2) Initialize
methods which takes connection string.&lt;br&gt;&lt;br&gt;&lt;div class="code"&gt;&lt;br&gt;&lt;font color="blue"&gt;public&amp;nbsp;interface&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;IMVCAuthorizer&amp;nbsp;{&lt;br&gt;
&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;&lt;/font&gt;&lt;font color="blue"&gt;bool&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;IsAuthorized(&lt;/font&gt;&lt;font color="blue"&gt;string&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;controllerName,&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;string&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;actionName,&amp;nbsp;System.Security.Principal.IPrincipal&amp;nbsp;user)&lt;/font&gt;&lt;font color="blue"&gt;;&lt;br&gt;
&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;void&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;Initilize(&lt;/font&gt;&lt;font color="blue"&gt;string&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;connectionString)&lt;/font&gt;&lt;font color="blue"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="black"&gt;}&lt;/font&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;MCVXMLAuthorizer
implements IMVCAuthorizer, In Initialize method it reads XML file and
de-serialize it into ControllerAuthorizationInfoCollection class, as
you can see it puts de-serialize object into cache and puts dependency
on physical file so any time some body changes the file cache will be
invalidated.
&lt;br&gt;&lt;br&gt;IsAuthorized is the method that contains logic to check
authorization against XML configuration you can download the source
code if you want to go deeper into logic inside&amp;nbsp;
ControllerAuthorizationInfoCollection class.
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="code"&gt;&lt;font color="blue"&gt;public&amp;nbsp;class&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;MCVXMLAuthorizer:IMVCAuthorizer&amp;nbsp;{&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ControllerAuthorizationInfoCollection&amp;nbsp;controllers&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;null;&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;bool&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;IsAuthorized(&lt;/font&gt;&lt;font color="blue"&gt;string&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;controllerName&amp;nbsp;,&lt;/font&gt;&lt;font color="blue"&gt;string&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;actionName,&amp;nbsp;System.Security.Principal.IPrincipal&amp;nbsp;user)&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;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;return&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;controllers.CanAccessAction(controllerName,actionName,&amp;nbsp;user)&lt;/font&gt;&lt;font color="blue"&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;}&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&amp;nbsp;void&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;Initilize(&lt;/font&gt;&lt;font color="blue"&gt;string&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;connectionString)&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;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;string&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;key&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="#808080"&gt;"MCVXMLAuthorizerCacheKey"&lt;/font&gt;&lt;font color="blue"&gt;;&lt;br&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;if&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;(HttpContext.Current.Cache[key]&amp;nbsp;!&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;null&lt;/font&gt;&lt;font color="black"&gt;)&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;controllers&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;(ControllerAuthorizationInfoCollection)HttpContext.Current.Cache[key]&lt;/font&gt;&lt;font color="blue"&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;&lt;/font&gt;&lt;font color="black"&gt;}&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;else&amp;nbsp;&lt;/font&gt;&lt;font color="black"&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;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;string&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;path&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;HttpContext.Current.Server.MapPath(connectionString)&lt;/font&gt;&lt;font color="blue"&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;nbsp;&lt;/font&gt;&lt;font color="black"&gt;controllers&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;getControllerAuthorizationInfoCollection(path)&lt;/font&gt;&lt;font color="blue"&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;nbsp;&lt;/font&gt;&lt;font color="black"&gt;HttpContext.Current.Cache.Insert(key,&amp;nbsp;controllers,&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;new&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;System.Web.Caching.CacheDependency(path))&lt;/font&gt;&lt;font color="blue"&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;&lt;/font&gt;&lt;font color="black"&gt;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;private&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;ControllerAuthorizationInfoCollection&amp;nbsp;getControllerAuthorizationInfoCollection(&lt;/font&gt;&lt;font color="blue"&gt;string&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;path)&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;nbsp;ControllerAuthorizationInfoCollection&amp;nbsp;rVal&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;null;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;XmlSerializer&amp;nbsp;ser&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;XmlSerializer(&lt;/font&gt;&lt;font color="blue"&gt;typeof&lt;/font&gt;&lt;font color="black"&gt;(ControllerAuthorizationInfoCollection))&lt;/font&gt;&lt;font color="blue"&gt;;&lt;br&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;using&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;(FileStream&amp;nbsp;fs&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;File.OpenRead(path))&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rVal&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;(ControllerAuthorizationInfoCollection)ser.Deserialize(fs)&lt;/font&gt;&lt;font color="blue"&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;&lt;/font&gt;&lt;font color="black"&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;&lt;/font&gt;&lt;font color="blue"&gt;return&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;rVal&lt;/font&gt;&lt;font color="blue"&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;h2&gt;HttpModule&lt;/h2&gt;AuthorizationMappingModule
is an HttpModule which hooks into AuthorizedRequest event of page life
cycle and check is user has access to particular controller and action,
if user does not have privilege to access then it will throw Security
Exception.&lt;br&gt;&lt;br&gt;&lt;div class="code"&gt;&lt;font color="blue"&gt;void&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;OnAuthorizeRequest(&lt;/font&gt;&lt;font color="blue"&gt;object&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&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;nbsp;HttpContext&amp;nbsp;context&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;((HttpApplication)sender).Context&lt;/font&gt;&lt;font color="blue"&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;&lt;/font&gt;&lt;font color="black"&gt;RouteData&amp;nbsp;routeData&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;RouteTable.Routes.GetRouteData(&lt;/font&gt;&lt;font color="blue"&gt;new&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;HttpContextWrapper(context))&lt;/font&gt;&lt;font color="blue"&gt;;&lt;br&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;if&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;(routeData&amp;nbsp;!&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;null&lt;/font&gt;&lt;font color="black"&gt;)&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;string&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;controller&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;routeData.GetRequiredString(&lt;/font&gt;&lt;font color="#808080"&gt;"controller"&lt;/font&gt;&lt;font color="black"&gt;)&lt;/font&gt;&lt;font color="blue"&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;nbsp;string&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;action&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;routeData.GetRequiredString(&lt;/font&gt;&lt;font color="#808080"&gt;"action"&lt;/font&gt;&lt;font color="black"&gt;)&lt;/font&gt;&lt;font color="blue"&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;nbsp;&lt;/font&gt;&lt;font color="black"&gt;IMVCAuthorizer&amp;nbsp;authorizer&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;GetMVCAuthorizer()&lt;/font&gt;&lt;font color="blue"&gt;;&lt;br&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;nbsp;if&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;(!authorizer.IsAuthorized(controller,&amp;nbsp;action,&amp;nbsp;context.User))&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;string&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;message&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;string&lt;/font&gt;&lt;font color="black"&gt;.Format(&lt;/font&gt;&lt;font color="#808080"&gt;"User&amp;nbsp;{0}&amp;nbsp;does&amp;nbsp;not&amp;nbsp;have&amp;nbsp;permission&amp;nbsp;to&amp;nbsp;access&amp;nbsp;{1}&amp;nbsp;on&amp;nbsp;{2}"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;,&amp;nbsp;context.User.Identity.Name,&amp;nbsp;action,&amp;nbsp;controller)&lt;/font&gt;&lt;font color="blue"&gt;;&lt;br&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;System.Diagnostics.Trace.TraceInformation(message)&lt;/font&gt;&lt;font color="blue"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw&amp;nbsp;new&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;SecurityException(message)&lt;/font&gt;&lt;font color="blue"&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;nbsp;&lt;/font&gt;&lt;font color="black"&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;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/font&gt;&lt;/div&gt;&lt;h2&gt;Sample MVC Application to test Authorization.&lt;/h2&gt;I
have created a simple MVC application with two Controllers, Controller
that we are going to test is Admin Controller, I have also simple UI in
Home Controller which allows you to login as an different user and try
to access different links. As an-authenticated user you should not have
access to any actions on Admin Controller and as you switch your role
by clicking different login links your permission will change.
following is the screen shot of application.&lt;br&gt;&lt;br&gt;&lt;img src="http://weblogs.asp.net/blogs/jigardesai/MVC_AUTH_XML/UI.gif" mce_src="http://weblogs.asp.net/blogs/jigardesai/MVC_AUTH_XML/UI.gif" width="700" height="475"&gt;&lt;br&gt;&lt;br&gt;You
will need to add reference to MVCAuthorization.dll and following
configuration section handler and http module settings in your
web.config file.&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;img src="http://weblogs.asp.net/blogs/jigardesai/MVC_AUTH_XML/config_settings.gif" mce_src="http://weblogs.asp.net/blogs/jigardesai/MVC_AUTH_XML/config_settings.gif" width="600" height="253"&gt;&lt;br&gt;&lt;br&gt;&lt;h2&gt;Next Steps,&lt;/h2&gt;If
you are planning to store mappings in database you can easily create
your own implementation of MVCSQLAuthorizer and plug into Web.config
file.&lt;br&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6713202" width="1" height="1"&gt;</content><author><name>jigar</name><uri>http://weblogs.asp.net/members/jigar.aspx</uri></author><category term="XML Configuration" scheme="http://weblogs.asp.net/jigardesai/archive/tags/XML+Configuration/default.aspx" /><category term="MVC" scheme="http://weblogs.asp.net/jigardesai/archive/tags/MVC/default.aspx" /><category term="Authorization" scheme="http://weblogs.asp.net/jigardesai/archive/tags/Authorization/default.aspx" /><category term="ASP.Net" scheme="http://weblogs.asp.net/jigardesai/archive/tags/ASP.Net/default.aspx" /></entry><entry><title>Generic String.Parse Extension Method</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jigardesai/archive/2008/03/26/generic-string-parse-extension-method.aspx" /><id>http://weblogs.asp.net/jigardesai/archive/2008/03/26/generic-string-parse-extension-method.aspx</id><published>2008-03-27T01:05:00Z</published><updated>2008-03-27T01:05:00Z</updated><content type="html">&lt;!-- code formatted by http://manoli.net/csharpformat/ --&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;After reading &lt;a href="http://weblogs.asp.net/istofix/archive/2008/03/26/another-simple-use-of-extension-methods.aspx" mce_href="http://weblogs.asp.net/istofix/archive/2008/03/26/another-simple-use-of-extension-methods.aspx"&gt;this post&lt;/a&gt; about missing parses method for
nullable integer and possible implementation. I want to share my version of parse
method with generic touch.&lt;/p&gt;

&lt;p&gt;Here’s my parser class&lt;/p&gt;

&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.ComponentModel;&lt;br&gt;&lt;br&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Parser {&lt;br&gt;&lt;br&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; T Parse&amp;lt;T&amp;gt;(&lt;span class="kwrd"&gt;this&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;) {&lt;br&gt;        &lt;span class="rem"&gt;// Get default value for type so if string&lt;/span&gt;
        &lt;span class="rem"&gt;// is empty then we can return default value.&lt;/span&gt;
        T result = &lt;span class="kwrd"&gt;default&lt;/span&gt;(T);&lt;br&gt;        &lt;br&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(&lt;span class="kwrd"&gt;value&lt;/span&gt;)) {&lt;br&gt;            &lt;span class="rem"&gt;// we are not going to handle exception here&lt;/span&gt;
            &lt;span class="rem"&gt;// if you need SafeParse then you should create&lt;/span&gt;
            &lt;span class="rem"&gt;// another method specially for that.&lt;/span&gt;
            TypeConverter tc = TypeDescriptor.GetConverter(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(T));&lt;br&gt;            result = (T)tc.ConvertFrom(&lt;span class="kwrd"&gt;value&lt;/span&gt;);&lt;br&gt;        }&lt;br&gt;&lt;br&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; result;&lt;br&gt;    }&lt;br&gt;}&lt;/pre&gt;

And here's how you use it.

&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;// regular parsing&lt;/span&gt;
&lt;span class="kwrd"&gt;int&lt;/span&gt; i = &lt;span class="str"&gt;"123"&lt;/span&gt;.Parse&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt;(); &lt;br&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt;? inull = &lt;span class="str"&gt;"123"&lt;/span&gt;.Parse&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt;(); &lt;br&gt;DateTime d = &lt;span class="str"&gt;"01/12/2008"&lt;/span&gt;.Parse&amp;lt;DateTime&amp;gt;(); &lt;br&gt;DateTime? dn = &lt;span class="str"&gt;"01/12/2008"&lt;/span&gt;.Parse&amp;lt;DateTime?&amp;gt;();&lt;br&gt;&lt;br&gt;&lt;span class="rem"&gt;// null values&lt;/span&gt;
&lt;span class="kwrd"&gt;string&lt;/span&gt; sample = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;br&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt;? k = sample.Parse&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;?&amp;gt;(); &lt;span class="rem"&gt;// returns null&lt;/span&gt;
&lt;span class="kwrd"&gt;int&lt;/span&gt; l = sample.Parse&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt;();   &lt;span class="rem"&gt;// returns 0&lt;/span&gt;
DateTime dd = sample.Parse&amp;lt;DateTime&amp;gt;(); &lt;span class="rem"&gt;// returns 01/01/0001&lt;/span&gt;
DateTime? ddn = sample.Parse&amp;lt;DateTime?&amp;gt;(); // returns null&lt;/pre&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6034843" width="1" height="1"&gt;</content><author><name>jigar</name><uri>http://weblogs.asp.net/members/jigar.aspx</uri></author><category term="Generics" scheme="http://weblogs.asp.net/jigardesai/archive/tags/Generics/default.aspx" /><category term="Extension Methods" scheme="http://weblogs.asp.net/jigardesai/archive/tags/Extension+Methods/default.aspx" /></entry><entry><title>How do I uninstall Silverlight 1.0 SDK Visual Studio 2005 Template?</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jigardesai/archive/2008/03/05/uninstall-silverlight-1-0-sdk-visual-studio-2005-template.aspx" /><id>http://weblogs.asp.net/jigardesai/archive/2008/03/05/uninstall-silverlight-1-0-sdk-visual-studio-2005-template.aspx</id><published>2008-03-06T00:46:00Z</published><updated>2008-03-06T00:46:00Z</updated><content type="html">&lt;p&gt;While trying to uninstall the "Silverlight 1.0 SDK Visual Studio 2005 Template" I got following message.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;"Microsoft Sliverlight 1.0 SDK Visual Studio 2005 Templates requires&amp;nbsp; Microsoft Visual Studio 2005 to be installed see the Microsoft Sliverlight 1.0 SDK Visual Studio 2005 Template release Notes for more information."&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I have already switched to VS 2008, don't tell me that I have to install the VS 2005 to uninstall the Silverlight SDK for VS 2005.&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://weblogs.asp.net/blogs/jigardesai/Uninstall_Silverlight1_0SDK.jpg" mce_src="http://weblogs.asp.net/blogs/jigardesai/Uninstall_Silverlight1_0SDK.jpg"&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5923116" width="1" height="1"&gt;</content><author><name>jigar</name><uri>http://weblogs.asp.net/members/jigar.aspx</uri></author><category term="Sliverlight 1.0 SDK" scheme="http://weblogs.asp.net/jigardesai/archive/tags/Sliverlight+1.0+SDK/default.aspx" /><category term="Uninstall" scheme="http://weblogs.asp.net/jigardesai/archive/tags/Uninstall/default.aspx" /></entry><entry><title>XSLT Transformation in ASP.net MVC framework</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jigardesai/archive/2008/02/08/xslt-transformation-in-asp-net-mvc-framework.aspx" /><link rel="enclosure" type="application/zip" length="69341" href="http://weblogs.asp.net/jigardesai/attachment/5739989.ashx" /><id>http://weblogs.asp.net/jigardesai/archive/2008/02/08/xslt-transformation-in-asp-net-mvc-framework.aspx</id><published>2008-02-09T01:11:00Z</published><updated>2008-02-09T01:11:00Z</updated><content type="html">&lt;p&gt;In my last post I talked about using a partial view to render hierarchical data, however XSL transformation looks more appropriate for such cases. ASP.Net has &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.xml%28VS.71%29.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.xml%28VS.71%29.aspx"&gt;XML control&lt;/a&gt; which can display XML document using XSL Transformations. I will show you how similar thing can be achieved in ASP.NET MVC Framework.&lt;/p&gt;
		&lt;h3&gt;The Model&lt;br&gt;&lt;/h3&gt;
		
&lt;p&gt;I have a very simple Tab class which can have a collection of sub-tab. this class can be used to create&amp;nbsp;infinite level of tab hierarchy. I have added XmlAttributes to my properties so that when class is serialized those properties are sterilized as attributes.&lt;/p&gt;
		&lt;div class="code"&gt;
				&lt;font color="blue"&gt;public&amp;nbsp;class&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;Tab&amp;nbsp;{&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[XmlAttribute(&lt;/font&gt;
				&lt;font color="#808080"&gt;"id"&lt;/font&gt;
				&lt;font color="black"&gt;)]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;public&amp;nbsp;int&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;ID&amp;nbsp;{&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;get;&amp;nbsp;set;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[XmlAttribute(&lt;/font&gt;
				&lt;font color="#808080"&gt;"name"&lt;/font&gt;
				&lt;font color="black"&gt;)]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;public&amp;nbsp;string&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;Name&amp;nbsp;{&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;get;&amp;nbsp;set;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[XmlAttribute(&lt;/font&gt;
				&lt;font color="#808080"&gt;"alias"&lt;/font&gt;
				&lt;font color="black"&gt;)]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;public&amp;nbsp;string&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;Alias&amp;nbsp;{&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;get;&amp;nbsp;set;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;public&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;List&amp;lt;Tab&amp;gt;&amp;nbsp;Tabs&amp;nbsp;{&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;get;&amp;nbsp;set;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&gt;}&lt;/font&gt;
		&lt;/div&gt;
		&lt;div class="code"&gt;&amp;nbsp;&lt;/div&gt;
		&lt;h3&gt;The Controller&lt;/h3&gt;
		
&lt;p&gt;I have a single controller called TabController it has TabXSLT action, it does two things 1) Gets list of tabs from by calling service and then serializes it to XML and 2) Passes that XML to view. &lt;/p&gt;
		&lt;div class="code"&gt;
				&lt;font color="blue"&gt;public&amp;nbsp;class&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;TabController&amp;nbsp;:&amp;nbsp;Controller&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[ControllerAction]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;public&amp;nbsp;void&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;TabXSLT()&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;Tab&amp;gt;&amp;nbsp;tabs&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;TabService.GetTabs()&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;XmlSerializer&amp;nbsp;serilizer&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&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;nbsp;new&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;XmlSerializer(&lt;/font&gt;
				&lt;font color="blue"&gt;typeof&lt;/font&gt;
				&lt;font color="black"&gt;(List&amp;lt;Tab&amp;gt;))&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;MemoryStream&amp;nbsp;stream&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;MemoryStream()&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;stream.Seek(&lt;/font&gt;
				&lt;font color="maroon"&gt;0&lt;/font&gt;
				&lt;font color="black"&gt;,&amp;nbsp;SeekOrigin.Begin)&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&amp;nbsp;&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;&lt;/font&gt;
				&lt;font color="black"&gt;serilizer.Serialize(stream,&amp;nbsp;tabs)&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;XmlDocument&amp;nbsp;doc&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;XmlDocument()&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;stream.Seek(&lt;/font&gt;
				&lt;font color="maroon"&gt;0&lt;/font&gt;
				&lt;font color="black"&gt;,&amp;nbsp;SeekOrigin.Begin)&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;doc.Load(stream)&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;ViewData[&lt;/font&gt;
				&lt;font color="#808080"&gt;"tabs"&lt;/font&gt;
				&lt;font color="black"&gt;]&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;doc&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;RenderView(&lt;/font&gt;
				&lt;font color="#808080"&gt;"TabXSLT"&lt;/font&gt;
				&lt;font color="black"&gt;)&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;}&lt;/font&gt;
		&lt;/div&gt;
		&lt;div class="code"&gt;&amp;nbsp;&lt;/div&gt;
		&lt;h3&gt;View extension for XSLT&lt;/h3&gt;
		
&lt;p&gt;MVC Framework does not have concept of the control, Instead UI Helpers and ViewExtensions will enable you to wrap common functionality. I have used view extension in my case to inject additional method in view which will allow me render transformed XML inside my view. &lt;/p&gt;
		&lt;div class="code"&gt;
				&lt;font color="blue"&gt;public&amp;nbsp;static&amp;nbsp;class&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;XSLTViewExtensions&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;public&amp;nbsp;static&amp;nbsp;void&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;RenderXML(&lt;/font&gt;
				&lt;font color="blue"&gt;this&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;ViewPage&amp;nbsp;page&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;XmlDocument&amp;nbsp;xmlDocument&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;string&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;XSLTPath,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dictionary&amp;lt;&lt;/font&gt;
				&lt;font color="blue"&gt;string&lt;/font&gt;
				&lt;font color="black"&gt;,&lt;/font&gt;
				&lt;font color="blue"&gt;string&lt;/font&gt;
				&lt;font color="black"&gt;&amp;gt;&amp;nbsp;xslArgParams)&amp;nbsp;&lt;br&gt;&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;ViewContext&amp;nbsp;context&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;page.Html.ViewContext&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;XsltArgumentList&amp;nbsp;xslArgs&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;XsltArgumentList()&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;(xslArgParams&amp;nbsp;!&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;null&lt;/font&gt;
				&lt;font color="black"&gt;)&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;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;foreach&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;(&lt;/font&gt;
				&lt;font color="blue"&gt;string&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;key&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;in&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;xslArgParams.Keys)&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xslArgs.AddParam(key,&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;null&lt;/font&gt;
				&lt;font color="black"&gt;,xslArgParams[key])&lt;/font&gt;
				&lt;font color="blue"&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;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&gt;&amp;nbsp;&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;XslCompiledTransform&amp;nbsp;t&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;XslCompiledTransform()&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;t.Load(XSLTPath)&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;t.Transform(xmlDocument,&amp;nbsp;xslArgs,&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;nbsp;context.HttpContext.Response.Output)&lt;/font&gt;
				&lt;font color="blue"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="black"&gt;}&lt;br&gt;&lt;br&gt;}&lt;/font&gt;
		&lt;/div&gt;
		&lt;div class="code"&gt;&amp;nbsp;&lt;/div&gt;
		&lt;h3&gt;The View &lt;/h3&gt;
		
&lt;p&gt;I have the TabXSLT.aspx view in /Views/Tab folder. Inside my view I am calling extension method by passing XML data that I got from controller and path to XSLT file. &lt;/p&gt;
		&lt;div class="code"&gt;
				&lt;span style="background-color: rgb(255, 255, 153);"&gt;
						&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
						&lt;font color="maroon"&gt;%@&lt;/font&gt;
						&lt;font color="red"&gt;&amp;nbsp;Page&amp;nbsp;Language&lt;/font&gt;
						&lt;font color="blue"&gt;="C#"&lt;/font&gt;
						&lt;font color="red"&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Inherits&lt;/font&gt;
						&lt;font color="blue"&gt;="System.Web.Mvc.ViewPage"&lt;/font&gt;
						&lt;font color="red"&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MasterPageFile&lt;/font&gt;
						&lt;font color="blue"&gt;="~/Views/Shared/Site.Master"&lt;/font&gt;
						&lt;font color="red"&gt;&amp;nbsp;%&lt;/font&gt;
						&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
						&lt;font color="black"&gt;
						&lt;/font&gt;
				&lt;/span&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
				&lt;/font&gt;
				&lt;span style="background-color: rgb(255, 255, 153);"&gt;
						&lt;font color="black"&gt;
						&lt;/font&gt;
						&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
						&lt;font color="maroon"&gt;%@&lt;/font&gt;
						&lt;font color="red"&gt;&amp;nbsp;Import&amp;nbsp;Namespace&lt;/font&gt;
						&lt;font color="blue"&gt;="ExperimentsWithMVC.Models"&lt;/font&gt;
						&lt;font color="red"&gt;&amp;nbsp;%&lt;/font&gt;
						&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
						&lt;font color="black"&gt;
						&lt;/font&gt;
				&lt;/span&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
				&lt;/font&gt;
				&lt;span style="background-color: rgb(255, 255, 153);"&gt;
						&lt;font color="black"&gt;
						&lt;/font&gt;
						&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
						&lt;font color="maroon"&gt;%@&lt;/font&gt;
						&lt;font color="red"&gt;&amp;nbsp;Import&amp;nbsp;Namespace&lt;/font&gt;
						&lt;font color="blue"&gt;="System.Collections.Generic"&lt;/font&gt;
						&lt;font color="red"&gt;&amp;nbsp;%&lt;/font&gt;
						&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
						&lt;font color="black"&gt;
						&lt;/font&gt;
				&lt;/span&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
				&lt;/font&gt;
				&lt;span style="background-color: rgb(255, 255, 153);"&gt;
						&lt;font color="black"&gt;
						&lt;/font&gt;
						&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
						&lt;font color="maroon"&gt;%@&lt;/font&gt;
						&lt;font color="red"&gt;&amp;nbsp;Import&amp;nbsp;Namespace&lt;/font&gt;
						&lt;font color="blue"&gt;="System.Web.Mvc"&lt;/font&gt;
						&lt;font color="red"&gt;&amp;nbsp;%&lt;/font&gt;
						&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
						&lt;font color="black"&gt;
						&lt;/font&gt;
				&lt;/span&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
				&lt;/font&gt;
				&lt;span style="background-color: rgb(255, 255, 153);"&gt;
						&lt;font color="black"&gt;
						&lt;/font&gt;
						&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
						&lt;font color="maroon"&gt;%@&lt;/font&gt;
						&lt;font color="red"&gt;&amp;nbsp;Import&amp;nbsp;Namespace&lt;/font&gt;
						&lt;font color="blue"&gt;="System.Xml"&lt;/font&gt;
						&lt;font color="red"&gt;&amp;nbsp;%&lt;/font&gt;
						&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
						&lt;font color="black"&gt;
						&lt;/font&gt;
				&lt;/span&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
				&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;asp:Content&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;ID&lt;/font&gt;
				&lt;font color="blue"&gt;="Content2"&lt;/font&gt;
				&lt;font color="red"&gt;&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;nbsp;&amp;nbsp;ContentPlaceHolderID&lt;/font&gt;
				&lt;font color="blue"&gt;="MainContentPlaceHolder"&lt;/font&gt;
				&lt;font color="red"&gt;&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;nbsp;&amp;nbsp;runat&lt;/font&gt;
				&lt;font color="blue"&gt;="server"&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;h2&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;Tabs&amp;nbsp;with&amp;nbsp;XSLT&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;h2&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;span style="background-color: rgb(255, 255, 153);"&gt;
						&lt;font color="black"&gt;
						&lt;/font&gt;
						&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
						&lt;font color="maroon"&gt;%&lt;/font&gt;
						&lt;font color="red"&gt;&amp;nbsp;this.RenderXML((XmlDocument)ViewData[&lt;/font&gt;
						&lt;font color="blue"&gt;"tabs"]&lt;/font&gt;
						&lt;font color="red"&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;Server.MapPath(&lt;/font&gt;
						&lt;font color="blue"&gt;"~/content/tabs.xsl"),null);%&amp;gt;&lt;/font&gt;
						&lt;font color="black"&gt;
						&lt;/font&gt;
				&lt;/span&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
				&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;asp:Content&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
		&lt;/div&gt;
		&lt;div class="code"&gt;
				&lt;font color="black"&gt;
				&lt;/font&gt;&amp;nbsp;&lt;/div&gt;
		&lt;h3&gt;The XSLT&lt;/h3&gt;
		&lt;div class="code"&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;?xml&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;version&lt;/font&gt;
				&lt;font color="blue"&gt;="1.0"&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;encoding&lt;/font&gt;
				&lt;font color="blue"&gt;="utf-8"?&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
				&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;xsl:stylesheet&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;version&lt;/font&gt;
				&lt;font color="blue"&gt;="1.0"&lt;/font&gt;
				&lt;font color="red"&gt;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:xsl&lt;/font&gt;
				&lt;font color="blue"&gt;="http://www.w3.org/1999/XSL/Transform"&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;xsl:output&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;omit-xml-declaration&lt;/font&gt;
				&lt;font color="blue"&gt;="yes"&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;xsl:template&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;match&lt;/font&gt;
				&lt;font color="blue"&gt;="/"&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;xsl:apply-templates&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
				&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;xsl:apply-templates&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;xsl:template&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
						&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;xsl:template&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;match&lt;/font&gt;
				&lt;font color="blue"&gt;="Tab"&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;li&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;xsl:value-of&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;select&lt;/font&gt;
				&lt;font color="blue"&gt;="@name"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;xsl:apply-templates&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;select&lt;/font&gt;
				&lt;font color="blue"&gt;="Tabs"&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
				&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;xsl:apply-templates&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;li&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;xsl:template&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
						&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;xsl:template&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;match&lt;/font&gt;
				&lt;font color="blue"&gt;="Tabs"&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;ul&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;xsl:apply-templates&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;select&lt;/font&gt;
				&lt;font color="blue"&gt;="Tab"&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;ul&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;xsl:template&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
						&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;xsl:template&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;match&lt;/font&gt;
				&lt;font color="blue"&gt;="ArrayOfTab"&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;ul&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;
				&lt;font color="maroon"&gt;xsl:apply-templates&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;select&lt;/font&gt;
				&lt;font color="blue"&gt;="Tab"&lt;/font&gt;
				&lt;font color="red"&gt;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;ul&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;xsl:template&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
				&lt;font color="black"&gt;
						&lt;br&gt;
				&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;
				&lt;font color="maroon"&gt;xsl:stylesheet&lt;/font&gt;
				&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;
		&lt;/div&gt;
		&lt;div class="code"&gt;&amp;nbsp;&lt;font color="black"&gt;&lt;/font&gt;&lt;/div&gt;
		&lt;h3&gt;The result&lt;/h3&gt;
		
&lt;p&gt;Result is nested unordered list as shown below, each item can have sub item up to nth level. &lt;/p&gt;
		
&lt;p&gt;
				&lt;img src="http://weblogs.asp.net/blogs/jigardesai/Tabs_XSLT.jpg" align="bottom" border="0" hspace="0"&gt;
		&lt;/p&gt;
		&lt;h3&gt;Parting Thoughts&lt;/h3&gt;
		
&lt;p&gt;I have used extension method to inject additional method in my current ViewPage class but it might be more appropriate to group similar UI helper methods in static class, for example you can have AJAXHelper, HTMLHelper, XMLHelper etc.&lt;/p&gt;

&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5739989" width="1" height="1"&gt;</content><author><name>jigar</name><uri>http://weblogs.asp.net/members/jigar.aspx</uri></author><category term="ASP.Net MVC" scheme="http://weblogs.asp.net/jigardesai/archive/tags/ASP.Net+MVC/default.aspx" /><category term="XML" scheme="http://weblogs.asp.net/jigardesai/archive/tags/XML/default.aspx" /><category term="XSLT" scheme="http://weblogs.asp.net/jigardesai/archive/tags/XSLT/default.aspx" /></entry><entry><title>Display hierarchical data in ASP.net MVC framework</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jigardesai/archive/2008/02/04/display-hierarchical-data-in-asp-net-mvc-framework.aspx" /><link rel="enclosure" type="application/zip" length="69341" href="http://weblogs.asp.net/jigardesai/attachment/5702739.ashx" /><id>http://weblogs.asp.net/jigardesai/archive/2008/02/04/display-hierarchical-data-in-asp-net-mvc-framework.aspx</id><published>2008-02-04T14:00:00Z</published><updated>2008-02-04T14:00:00Z</updated><content type="html">&lt;p&gt;I am playing around recently with MVC Framework and as a apart of my experiments I wanted to display hierarchical data.&amp;nbsp;I want to share my finding with you, I hope you will find this interesting and&amp;nbsp;if you are interested you can &lt;a href="http://weblogs.asp.net/jigardesai/attachment/5702739.ashx" mce_href="http://weblogs.asp.net/jigardesai/attachment/5702739.ashx"&gt;download source here&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Simple unordered list&lt;/h3&gt;
&lt;p&gt;My final goal is to display a nested unordered list, as shown below each item can have sub item up to n&lt;sup&gt;th&lt;/sup&gt; level. In past&amp;nbsp;you might&amp;nbsp;have created this kind of&amp;nbsp;list using XSLT or ASP.net Repeater Control.&lt;/p&gt;&lt;p&gt;&lt;img src="http://weblogs.asp.net/blogs/jigardesai/Tabs_Hierarchy_UI.jpg" mce_src="http://weblogs.asp.net/blogs/jigardesai/Tabs_Hierarchy_UI.jpg"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://weblogs.asp.net/viewcontent.ashx?contentid=312" mce_src="http://weblogs.asp.net/viewcontent.ashx?contentid=312"&gt; &lt;/p&gt;
&lt;h3&gt;The Model with self referencing hierarchy&lt;/h3&gt;
&lt;p&gt;I have very simple Tab class which can have a collection of sub-tab. this class can be used to create multiple level of tab hierarchy. &lt;/p&gt;
&lt;div&gt;
&lt;div class="code"&gt;&lt;font color="blue"&gt;public&amp;nbsp;class&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;Tab&amp;nbsp;{&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;public&amp;nbsp;int&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;ID&amp;nbsp;{&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;get;&amp;nbsp;set;&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;public&amp;nbsp;string&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;Name&amp;nbsp;{&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;get;&amp;nbsp;set;&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;}&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;public&amp;nbsp;string&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;Alias&amp;nbsp;{&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;get;&amp;nbsp;set;&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;}&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;public&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;List&amp;lt;Tab&amp;gt;&amp;nbsp;Tabs&amp;nbsp;{&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;get;&amp;nbsp;set;&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;}&lt;br&gt;}&lt;/font&gt; &lt;/div&gt;
&lt;div class="code"&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;
&lt;h3&gt;The Controller&lt;/h3&gt;
&lt;p&gt;I have a single controller called TabController it has Index action, it does two things&amp;nbsp;1) Gets list of tabs from&amp;nbsp;by calling service&amp;nbsp;and 2) Passes that list to view.&lt;/p&gt;
&lt;div class="code"&gt;&lt;font color="blue"&gt;public&amp;nbsp;class&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;TabController&amp;nbsp;:&amp;nbsp;Controller&amp;nbsp;{&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[ControllerAction]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;public&amp;nbsp;void&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;Index()&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ViewData[&lt;/font&gt; &lt;font color="#808080"&gt;"tabs"&lt;/font&gt; &lt;font color="black"&gt;]&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;TabService.GetTabs()&lt;/font&gt; &lt;font color="blue"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;RenderView(&lt;/font&gt; &lt;font color="#808080"&gt;"Index"&lt;/font&gt; &lt;font color="black"&gt;)&lt;/font&gt; &lt;font color="blue"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;}&lt;br&gt;}&lt;/font&gt; &lt;/div&gt;
&lt;div class="code"&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3&gt;View extension for partials&lt;/h3&gt;
&lt;p&gt;If you have worked with &lt;a href="http://www.rubyonrails.org/" mce_href="http://www.rubyonrails.org/"&gt;ROR&lt;/a&gt; and &lt;a href="http://www.castleproject.org/monorail/index.html" mce_href="http://www.castleproject.org/monorail/index.html"&gt;MonoRail&lt;/a&gt; then you must be familiar with partials. Partial allows you to extract a common piece of a template into a separate file and then you can use it form other templates. in&amp;nbsp;my case I have to create partial because&amp;nbsp;I want to use it from another template and recursively from itself. Current implementation of the ViewPage in the MVC Framework does not&amp;nbsp;allow me to call another view. So&amp;nbsp;I will need an extrension method which will allow&amp;nbsp;me to call another view. Credit&amp;nbsp;for&amp;nbsp;view extension&amp;nbsp;code goes to &lt;a href="http://www.nikhilk.net/Ajax-MVC.aspx" mce_href="http://www.nikhilk.net/Ajax-MVC.aspx"&gt;Nikhil Kothari&lt;/a&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;font color="blue"&gt;public&amp;nbsp;static&amp;nbsp;class&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;ViewExtensions&amp;nbsp;{&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;public&amp;nbsp;static&amp;nbsp;void&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;RenderPartial(&lt;/font&gt; &lt;font color="blue"&gt;this&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;ViewPage&amp;nbsp;page,&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;string&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;viewName,&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;object&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;viewData)&amp;nbsp;&lt;br&gt;&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;RenderPartialCore(page.Html.ViewContext,&amp;nbsp;viewName,&amp;nbsp;viewData)&lt;/font&gt; &lt;font color="blue"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;}&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;private&amp;nbsp;static&amp;nbsp;void&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;RenderPartialCore(ViewContext&amp;nbsp;viewContext&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;string&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;viewName,&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;object&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;viewData)&amp;nbsp;&lt;br&gt;&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;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Controller&amp;nbsp;controller&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;(Controller)viewContext.Controller&lt;/font&gt; &lt;font color="blue"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;IViewFactory&amp;nbsp;viewFactory&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;controller.ViewFactory&lt;/font&gt; &lt;font color="blue"&gt;;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;IView&amp;nbsp;partialView&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;viewFactory.CreateView(viewContext,&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;viewName,&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;null&lt;/font&gt; &lt;font color="black"&gt;,&amp;nbsp;viewData)&lt;/font&gt; &lt;font color="blue"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;partialView.RenderView(viewContext)&lt;/font&gt; &lt;font color="blue"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;font color="black"&gt;}&lt;br&gt;}&lt;/font&gt; &lt;/div&gt;
&lt;div class="code"&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3&gt;Views &lt;/h3&gt;
&lt;p&gt;I have two views in /Views/Tab folder first one is &amp;nbsp;Index.aspx and second is&amp;nbsp;TabPartial.aspx&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Index view is the main view, it does not have any rendering logic it justs calls partial view and passes data. &lt;/p&gt;
&lt;div class="code"&gt;&lt;span style="background-color: rgb(255, 255, 153);"&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt; &lt;font color="maroon"&gt;%@&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;Page&amp;nbsp;Language&lt;/font&gt; &lt;font color="blue"&gt;="C#"&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MasterPageFile&lt;/font&gt; &lt;font color="blue"&gt;="~/Views/Shared/Site.Master"&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Inherits&lt;/font&gt; &lt;font color="blue"&gt;="System.Web.Mvc.ViewPage"&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;%&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;font color="black"&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color="black"&gt;&lt;br&gt;&lt;/font&gt;&lt;span style="background-color: rgb(255, 255, 153);"&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt; &lt;font color="maroon"&gt;%@&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;Import&amp;nbsp;Namespace&lt;/font&gt; &lt;font color="blue"&gt;="System.Collections.Generic"&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;%&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;font color="black"&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color="black"&gt;&lt;br&gt;&lt;/font&gt;&lt;span style="background-color: rgb(255, 255, 153);"&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt; &lt;font color="maroon"&gt;%@&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;Import&amp;nbsp;Namespace&lt;/font&gt; &lt;font color="blue"&gt;="ExperimentsWithMVC.Models"&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;%&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;font color="black"&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color="black"&gt;&lt;br&gt;&lt;/font&gt;&lt;span style="background-color: rgb(255, 255, 153);"&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt; &lt;font color="maroon"&gt;%@&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;Import&amp;nbsp;Namespace&lt;/font&gt; &lt;font color="blue"&gt;="System.Web.Mvc"&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;%&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;font color="black"&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color="black"&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt; &lt;font color="maroon"&gt;asp:Content&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;ID&lt;/font&gt; &lt;font color="blue"&gt;="Content2"&lt;/font&gt; &lt;font color="red"&gt;&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;nbsp;&amp;nbsp;ContentPlaceHolderID&lt;/font&gt; &lt;font color="blue"&gt;="MainContentPlaceHolder"&lt;/font&gt; &lt;font color="red"&gt;&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;nbsp;&amp;nbsp;runat&lt;/font&gt; &lt;font color="blue"&gt;="server"&amp;gt;&lt;/font&gt; &lt;font color="black"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;&amp;lt;&lt;/font&gt; &lt;font color="maroon"&gt;h2&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;font color="black"&gt;Tabs&lt;/font&gt; &lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt; &lt;font color="maroon"&gt;h2&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;font color="black"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;span style="background-color: rgb(255, 255, 153);"&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt; &lt;font color="maroon"&gt;%&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;this.RenderPartial(&lt;/font&gt; &lt;font color="blue"&gt;"TabPartial",&lt;/font&gt; &lt;font color="red"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new&amp;nbsp;Dictionary&amp;lt;string,&amp;nbsp;object&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;font color="black"&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color="black"&gt;()&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{{&amp;nbsp;"tabs",&amp;nbsp;ViewData["tabs"]&amp;nbsp;}&amp;nbsp;});&amp;nbsp;%&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt; &lt;font color="maroon"&gt;asp:Content&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;/div&gt;
&lt;div class="code"&gt;&lt;font color="black"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;TabPartial.aspx is the partial view, it is responsible for rendering the unordered list, it will recursively call itself to render the sub-tabs. Remember that we are not using any masterpage for the partial template it is meant to be used only from another view. &lt;/p&gt;
&lt;div class="code"&gt;&lt;span style="background-color: rgb(255, 255, 153);"&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt; &lt;font color="maroon"&gt;%@&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;Page&amp;nbsp;Language&lt;/font&gt; &lt;font color="blue"&gt;="C#"&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;Inherits&lt;/font&gt; &lt;font color="blue"&gt;="System.Web.Mvc.ViewPage"&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;%&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;font color="black"&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color="black"&gt;&lt;br&gt;&lt;/font&gt;&lt;span style="background-color: rgb(255, 255, 153);"&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt; &lt;font color="maroon"&gt;%@&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;Import&amp;nbsp;Namespace&lt;/font&gt; &lt;font color="blue"&gt;="System.Collections.Generic"&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;%&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;font color="black"&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color="black"&gt;&lt;br&gt;&lt;/font&gt;&lt;span style="background-color: rgb(255, 255, 153);"&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt; &lt;font color="maroon"&gt;%@&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;Import&amp;nbsp;Namespace&lt;/font&gt; &lt;font color="blue"&gt;="ExperimentsWithMVC.Models"&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;%&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;font color="black"&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color="black"&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt; &lt;font color="maroon"&gt;ul&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;font color="black"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;span style="background-color: rgb(255, 255, 153);"&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt; &lt;font color="maroon"&gt;%&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;foreach&amp;nbsp;(Tab&amp;nbsp;tab&amp;nbsp;in&amp;nbsp;ViewData[&lt;/font&gt; &lt;font color="blue"&gt;"tabs"]&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;as&amp;nbsp;List&amp;lt;Tab&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;font color="black"&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color="black"&gt;)&amp;nbsp;{%&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;&amp;lt;&lt;/font&gt; &lt;font color="maroon"&gt;li&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;font color="black"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;span style="background-color: rgb(255, 255, 153);"&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt; &lt;font color="maroon"&gt;%=&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;tab.Name&amp;nbsp;%&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;font color="black"&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color="black"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;span style="background-color: rgb(255, 255, 153);"&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt; &lt;font color="maroon"&gt;%&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;if&amp;nbsp;(tab.Tabs&amp;nbsp;!&lt;/font&gt; &lt;font color="blue"&gt;=&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;null&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;tab.Tabs.Count&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;font color="black"&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color="black"&gt;&amp;nbsp;0)&amp;nbsp;{&amp;nbsp;%&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;&lt;/font&gt; &lt;span style="background-color: rgb(255, 255, 153);"&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt; &lt;font color="maroon"&gt;%&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;this.RenderPartial(&lt;/font&gt; &lt;font color="blue"&gt;"TabPartial",&lt;/font&gt; &lt;font color="red"&gt;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new&amp;nbsp;Dictionary&amp;lt;string,&amp;nbsp;object&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;font color="black"&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color="black"&gt;()&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;{&amp;nbsp;"tabs",&amp;nbsp;tab.Tabs&amp;nbsp;}&amp;nbsp;});&amp;nbsp;%&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;span style="background-color: rgb(255, 255, 153);"&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt; &lt;font color="maroon"&gt;%}&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;%&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;font color="black"&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color="black"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt; &lt;font color="maroon"&gt;li&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;font color="black"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;span style="background-color: rgb(255, 255, 153);"&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt; &lt;font color="maroon"&gt;%&lt;/font&gt; &lt;font color="red"&gt;&amp;nbsp;}%&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;font color="black"&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color="black"&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt; &lt;font color="maroon"&gt;ul&lt;/font&gt; &lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;/div&gt;
&lt;div class="code"&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3&gt;Parting thoughts&lt;/h3&gt;
&lt;p&gt;In the current implementation(Techincal Preview) of ASP.NET MVC Framework, ViewPage inherits from System.Web.UI.Page class which&amp;nbsp;make it very expensive for above scenerio because of unncecessary page life cycle events. I am sure that next beta version will have lighter implementation of ViewPage.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5702739" width="1" height="1"&gt;</content><author><name>jigar</name><uri>http://weblogs.asp.net/members/jigar.aspx</uri></author><category term="ASP.Net MVC" scheme="http://weblogs.asp.net/jigardesai/archive/tags/ASP.Net+MVC/default.aspx" /><category term="hierarchical" scheme="http://weblogs.asp.net/jigardesai/archive/tags/hierarchical/default.aspx" /><category term="Partial" scheme="http://weblogs.asp.net/jigardesai/archive/tags/Partial/default.aspx" /></entry><entry><title>AJAX Get Request using ASP.NET MVC &amp; Prototype</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jigardesai/archive/2008/01/26/Simple-AJAX-Get-Request-using-ASP.NET-MVC-and-Prototype.aspx" /><link rel="enclosure" type="application/zip" length="61342" href="http://weblogs.asp.net/jigardesai/attachment/5658178.ashx" /><id>http://weblogs.asp.net/jigardesai/archive/2008/01/26/Simple-AJAX-Get-Request-using-ASP.NET-MVC-and-Prototype.aspx</id><published>2008-01-27T04:38:00Z</published><updated>2008-01-27T04:38:00Z</updated><content type="html">I have been itching to work with ASP.NET MVC since first preview came out. In past I have used &lt;A href="http://www.rubyonrails.com/" mce_href="http://www.rubyonrails.com/"&gt;ROR&lt;/A&gt; and &lt;A href="http://www.castleproject.org/monorail/index.html" mce_href="http://www.castleproject.org/monorail/index.html"&gt;MonoRail&lt;/A&gt; frame work for prototyping small sample applications. I was really impressed with AJAX implementation in both frameworks, so it seemed logical to start with AJAX, However to make it more interesting I decided to use &lt;A href="http://www.prototypejs.org/" mce_href="http://www.prototypejs.org/"&gt;Prototype Javascript Framework&lt;/A&gt; instead of Microsoft AJAX implementation. 
&lt;H2&gt;About Prototype&lt;/H2&gt;
&lt;P&gt;&lt;A href="http://www.prototypejs.org/" mce_href="http://www.prototypejs.org/"&gt;Prototype JavaScript Framework&lt;/A&gt; enables you to deal with Ajax calls in a very easy way and it is also cross-browser. It provides few simple functions to encapsulate AJAX request.&lt;/P&gt;
&lt;H2&gt;Simple MasterDetail Page.&lt;/H2&gt;
&lt;P&gt;Very simple master detail page which will display list of users, when you click on "Show Details" link it will display user details. It’s simple and done lot of time before but this time we will do that with Prototype and ASP.NET MVC Framework.&lt;/P&gt;
&lt;P&gt;&lt;IMG title="Simple Master detail page" height=438 alt="Simple Master detail page" src="http://weblogs.asp.net/blogs/jigardesai/SimpleAJAX-01.jpg" width=271 mce_src="http://weblogs.asp.net/blogs/jigardesai/SimpleAJAX-01.jpg"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;The Controller&lt;/H2&gt;
&lt;P&gt;I have a User controller which has two actions, Index action is responsible for getting list of users and UserDetail&amp;nbsp;action is responsible for getting single user.&lt;/P&gt;
&lt;P&gt;&lt;IMG title="Simple AJAX Controller" height=251 alt="Simple AJAX Controller" src="http://weblogs.asp.net/blogs/jigardesai/SimpleAjaxController.jpg" width=476 mce_src="http://weblogs.asp.net/blogs/jigardesai/SimpleAjaxController.jpg"&gt; &lt;/P&gt;
&lt;H2&gt;The User listing View&lt;/H2&gt;
&lt;P&gt;I have Index.aspx view in /Views/SimpleAjax folder, this view is responsible for displaying list of users and link to JavaScript function which renders user details. I have used Ajax.Updater function to call remote page. Ajax.Updater can make request to remote page to receive HTML fragment that updates parts of the document.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;IMG title="User Listing View" height=407 alt="User Listing View" src="http://weblogs.asp.net/blogs/jigardesai/SimpleAjaxUserListView.jpg" width=647 mce_src="http://weblogs.asp.net/blogs/jigardesai/SimpleAjaxUserListView.jpg"&gt;&lt;/P&gt;
&lt;H2&gt;The User Detail View&lt;/H2&gt;
&lt;P&gt;Finally I have User.aspx view in /Views/SimpleAjax folder it can be used&amp;nbsp; as either partial view or AJAX callable, this view will simply spit out HTML without html,head and body tags. &lt;/P&gt;&lt;IMG title="User View" height=239 alt="User View" src="http://weblogs.asp.net/blogs/jigardesai/SimpleAjaxUserView.jpg" width=618 mce_src="http://weblogs.asp.net/blogs/jigardesai/SimpleAjaxUserView.jpg"&gt;&lt;BR&gt;
&lt;H2&gt;What’s Next&lt;/H2&gt;
&lt;P&gt;Instead of calling Prototype functions directly you also can create UI Helper methods to emit appropriate JavaScript and HTML. I will try to touch on UI Helper methods and more AJAX samples with prototype in my future blogs.&lt;/P&gt;
&lt;P&gt;Full sample source code is available &lt;A href="http://weblogs.asp.net/blogs/jigardesai/ExperimentsWithMVCAJAX.zip" mce_href="http://weblogs.asp.net/blogs/jigardesai/ExperimentsWithMVCAJAX.zip"&gt;here&lt;/A&gt; &lt;BR&gt;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5658178" width="1" height="1"&gt;</content><author><name>jigar</name><uri>http://weblogs.asp.net/members/jigar.aspx</uri></author><category term="Ajax.Updater" scheme="http://weblogs.asp.net/jigardesai/archive/tags/Ajax.Updater/default.aspx" /><category term="Prototype.js" scheme="http://weblogs.asp.net/jigardesai/archive/tags/Prototype.js/default.aspx" /><category term="ASP.Net MVC" scheme="http://weblogs.asp.net/jigardesai/archive/tags/ASP.Net+MVC/default.aspx" /><category term="AJAX" scheme="http://weblogs.asp.net/jigardesai/archive/tags/AJAX/default.aspx" /></entry></feed>