URL-адреса на главной странице должны относиться к корню или использовать подход tilde-slash ~/
, чтобы указать путь от корня сайта.
Если ваша главная страница - /App_Master/MyMaster.master
, и у вас есть несколько ссылок на нее, убедитесь, что они имеют вид:
<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"/>
Вместо таких вещей, как:
<link rel="Stylesheet" type="text/css" href="../SomeRelative/Path.css" />
<script type="text/javascript" src="Path/Not/From/The/Root.js" ></script>
EDIT:
Как вы храните свою карту сайта? Стандартный формат .net XML Sitemap? Ваши URL в карте сайта всегда должны ссылаться на пути из корня, используя тильды, такие как ~/My/Path.aspx
РЕДАКТИРОВАТЬ 2:
Спасибо за уточнение источника данных и формата.
Причина проблемы заключается в том, что URL-адреса, хранящиеся в источнике данных карты сайта (в данном случае SQL Server), не являются путями, основанными на корне сайта. Это стандартная практика для файлов сайтов asp.net хранить URL-адреса как ~/mypage.aspx
, а не mypage.aspx
. Это не зависит от выбранного формата хранения (xml или база данных SQL и т. Д.)
Я бы по-прежнему рекомендовал обновить URL-адреса в вашей базе данных с помощью корня с помощью ~/mypath.aspx
. Это стандартная практика. На самом деле нет причин изменять функциональность класса мастер-страницы, чтобы не разрешать URL-адреса.
Помните, по натуре традиционные html-лакомства:
- относительный URL
mypage.aspx
как в той же папке
- относительный URL
../mypage.aspx
как одна папка вверх
- URL
/mypage.aspx
от корня
ASP.NET основывается на этом с одной дополнительной нотацией:
- URL
~/mypage.aspx
от корня
с использованием URL contact-us.aspx
должно строить из текущей страницы по своей природе, поскольку так работают даже стандартные пути HTML src
и href
. Если вы поместите ваш sitemapdatasource и меню на простую страницу, вложенную в папку, и забудете об использовании главной страницы, вы обнаружите, что проблема все еще сохраняется.
Извините, что спорю, но я просто не вижу смысла в изменении основной функциональности создания URL-адресов в Интернете, когда URL-адреса в источнике данных не соответствуют простому формату ~/path/to/some/file.aspx
.
Возможно, кто-то еще может вмешаться, если я что-то упустил ...