Resolving Paths in a Multi-Folder WebSite
A low-impact method for getting the appropriate path on a web page.
I was messing around with my website today, and decided I wanted sub-folder under the root (for restricted access stuff).
I didn't want to copy all of my css and javascript stuff to the sub-folder, (waste of space), so I created a new master page in the sub- folder and then went about trying to figure out how to use the script files that were off the root. In the process of finding out what not to do, I found out there were several ways to resolve a path in ASP.Net. To make it easier to test for the right method, I wrote the following code, and put it in my masterpage.master.cs file.
public partial class Restricted_MasterResticted : System.Web.UI.MasterPage
{
protected enum ResolveType { MapPath, ResolveUrl, ResolveClientUrl };
//------------------------------------------------------------------------------------
// gets the file date of the currently displayed content page so it can be displayed
// in the footer.
//------------------------------------------------------------------------------------
protected string ResolvePath(string relPath, ResolveType resolveType)
{
string path = relPath;
switch (resolveType)
{
case ResolveType.ResolveClientUrl : path = Page.ResolveClientUrl(path); break;
case ResolveType.ResolveUrl : path = Page.ResolveUrl(path); break;
case ResolveType.MapPath : path = MapPath(path); break;
}
return path;
}
}
I did it this way so that I could have different path resolutions for each file (if needed). I don't know if the situation will ever come up, but - well - you know...
This is what the usage looks like in the HTML:
<link rel="stylesheet" type="text/css" href="<%=ResolvePath("~/pw_styles.css", ResolveType.ResolveClientUrl) %>" />As you can see, the correct resolve type for my case was
ResolveClientUrl
.