Urls in your master page should either be relative to the root, or use the tilde-slash ~/
approach, to indicate the path from the root of the site.
If you master page is /App_Master/MyMaster.master
and you have some links in it, ensure they are like:
<link rel="Stylesheet" type="text/css" href="/Path/From/The/Root.css" />
<script type="text/javascript" src="/Path/From/The/Root.js" ></script>
<a href="/Path/From/TheRoot.html">A non server-side link should start in forward slash and provide entire path</a>
<asp:HyperLink ID="MyHyperLink" runat="server" NavigateUrl="~/Path/to/Page.aspx" Text="Use the tilde-slash and use path from site-root"/>
Instead of things like:
<link rel="Stylesheet" type="text/css" href="../SomeRelative/Path.css" />
<script type="text/javascript" src="Path/Not/From/The/Root.js" ></script>
EDIT:
How are you storing your sitemap? The standard .net XML sitemap format? Your URLs in the sitemap should always reference paths from the root using tildes, such as ~/My/Path.aspx
EDIT 2:
Thanks for clarifying the datasource and format.
The cause of the issue is again that the urls stored in the site map datasource (SQL Server in this case) are not paths based on the root of the site. It is standard practice with asp.net sitemaps to store the urls as ~/mypage.aspx
not mypage.aspx
. This is irrespective of chosen storage format (xml vs SQL database, etc.)
I'd still recommend you consider updating your urls in your database to be from the root using ~/mypath.aspx
. This is standard practice. There is really no reason to modify the functionality of the masterpage class to not resolve the urls.
Remember, by nature, traditional html treats:
- the relative url
mypage.aspx
as in the same folder
- the relative url
../mypage.aspx
as one folder up
- the url
/mypage.aspx
from the root
ASP.NET builds on this with one extra notation:
- the url
~/mypage.aspx
from the root
using the url contact-us.aspx
should build from the current page by nature as this is how even standard html src
and href
paths work. If you put your sitemapdatasource and a menu on a plain page, nested in a folder, and forget about using a master page, you'll find the problem still persists.
Sorry to be argumentative, but I just don't see the value in modifying core url building functionality on the web, when the urls in the datasource aren't conforming to a simple format of ~/path/to/some/file.aspx
.
Perhaps someone else can chime in if I'm missing something...