Я работаю над веб-интерфейсом на C # ASP.net. Если это имеет значение, я использую XHTML 1.0 Transitional.
Этот веб-сайт имеет дело с мастер-страницей, и вот в чем проблема. Когда я использовал реальный абсолютный путь для ссылки CSS в заголовке, все было хорошо. Но потом, когда я попытался переключить его на нотацию тильды, все стили сломалось.
Вот фрагмент оригинальной главной страницы, который работал нормально:
<head>
<title>Account Information</title>
<link href="/css/main.css" rel="stylesheet" type="text/css" />
</head>
<body>
...
</body>
Но затем мы обнаружили, что эта учетная запись будет приложением, которое не находится в корне сервера, поэтому нам пришлось внести изменения.
<head>
<title>Account Information</title>
<link runat="server" href="~/css/main.css" rel="stylesheet" type="text/css" />
</head>
<body>
...
</body>
Теперь, те же самые изменения (добавление runat = "server" и тильда) работали просто FINE везде на странице, но это не так. Когда я посмотрел на вывод, он не разрешил тильду, поэтому ссылка фактически указывала на «myserver.net/~/css/main.css», что, очевидно, не сработает.
Далее я попытался использовать ResolveURL, вот так:
<link runat="server" href="<% =ResolveURL("~/css/main.css") %>" rel="stylesheet" type="text/css" />
Visual Studio даже не скомпилирует это. Он даже не знал, что имел в виду ResolveURL. (В качестве теста я вставил тот же код в нескольких других местах, включая заголовок страницы прямо рядом с тегом ссылки, и он работал нормально везде!)
Я в конце концов заставил его работать, дав ссылку ID и установив href в коде:
--Master page--
<link id="StyleLink" runat="server" rel="stylesheet" type="text/css" />
--Masterpage codebehind file--
StyleLink.Attributes.Add("href", ResolveUrl("~/css/main.css"));
Но мне остается удивляться, почему мне пришлось потратить два часа на борьбу с этим. Почему стандартная нотация не сработала? Некоторое время я гуглил, но не нашел ничего особенно актуального; самое близкое, что я мог найти, было обсуждение сбоя нотации, когда оно находилось на подмастерке.