65.9K
CodeProject is changing. Read more.
Home

Resolving Paths in a Multi-Folder WebSite

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.89/5 (10 votes)

Mar 3, 2010

CPOL
viewsIcon

36923

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.