Это может быть потому, что к вашему головному элементу применен атрибут runat = "server".
Я могу воссоздать проблему следующим образом:
<head runat="server">
<link href='<%= ResolveUrl("~/Styles/Blueprint/src/reset.css") %>' rel="stylesheet" type="text/css" />
</head>
С удаленным атрибутом он разрешает URL, как и ожидалось.
Редактировать
Кажется, что если элемент head определен для запуска в качестве серверного элемента управления, то элементы в нем также доступны для кода без необходимости помечать их как серверные элементы управления.
Например:
<link id="link1" href='<%= ResolveUrl("~/Styles/Blueprint/src/reset.css") %>' rel="stylesheet" type="text/css" />
доступен из кода в качестве элемента управления HtmlLink, даже если он не помечен атрибутом runat = "server".
Это объясняет код, который вы видите в атрибуте href, поскольку, поскольку он является свойством серверного элемента управления, он обрабатывает его как буквальный текст.
Что странно, так это то, что элемент title ведет себя таким же образом и доступен как объект HtmlTitle в коде позади, но тег script не является и должен быть явно определен как сервер runat = ", прежде чем он станет видимым в код позади.
Насколько я могу судить, у вас есть два варианта:
1 - Установить атрибут href напрямую:
<link rel="stylesheet" type="text/css" href="~/Styles/Blueprint/src/reset.css" />
Это будет иметь тот же эффект, что и использование Page.ResolveClientUrl, и разрешит URL-адрес таблицы стилей относительно страницы:
<link href="Styles/Blueprint/src/reset.css" rel="stylesheet" type="text/css" />
Или
2 - Определите ваш элемент ссылки в качестве серверного элемента управления (который в любом случае):
<link id="link1" runat="server" rel="stylesheet" type="text/css" />
И установите URL в коде:
link1.Href = ResolveUrl("~/Styles/Blueprint/src/reset.css");
Это разрешает URL-ссылку так:
<link id="link1" rel="stylesheet" type="text/css" href="/Styles/Blueprint/src/reset.css" />
Надеюсь, это поможет.