Проблема ResolveUrl на главной странице - PullRequest
2 голосов
/ 07 апреля 2010

Ладно,

Я знаю, что это странно, но когда я помещаю этот код между <head runat="server"></head> в master.page, вот как он рендерит в:

 <link id="ctl00_Link1" rel="shortcut icon" href="../%3C%25%20ResolveUrl(%22~/Resources/Pictures/Shared/Misc/favicon.ico%22);%20%25%3E" type="image/x-icon" />

Это не 'что-то, за что нужно позаботиться asp.net.

Это оригинальный код:

<link id="Link1" rel="shortcut icon" href='<%=ResolveUrl("~/Resources/Pictures/Shared/Misc/favicon.ico") %>' type="image/x-icon" runat="server" />

В основном Asp.Net не заботится о приведенном ниже коде и отображает его какобычный html.

Как мне справиться с этой проблемой?

Заранее спасибо ...

Изменить и решить

Хорошо, люди, нет способа сделать это.Я наконец-то понял, потому что ResolveUrl или ResolveClientUrl работает только для этих ниже:

@import '<%= ResolveUrl("~/Resources/Styles/MainMaster/MainDesign.css") %>';
<script src='Resources/Scripts/Libraries/jquery-1.4.2.js' type="text/javascript"</script>

это слишком буквально для ссылки, поэтому вам нужно поместить элементы ссылки в теге body как:

<body>
    <link id="iconOne" rel="shortcut icon" type="image/x-icon" href="Resources/Pictures/Shared/Misc/favicon.ico"/>
    <link id="iconTwo" rel="icon" href='Resources/Pictures/Shared/Misc/favicon.ico' type="image/ico" />
</body>

Ответы [ 2 ]

4 голосов
/ 07 апреля 2010

Итак, причина, по которой вы столкнулись с первой проблемой, заключалась в том, что тег ссылки имел runat="server" Это говорит asp.net о том, что он должен рассматриваться как элемент управления сервером, а не как литерал. Поскольку тэг скриптлета (<%= %>) является серверным элементом управления, на самом деле он ничего не делает, поскольку он является свойством серверного элемента управления и обрабатывает его как буквальный текст.

Есть два способа справиться с этим. Сначала нужно ClientScriptManager , чтобы зарегистрировать скрипт запуска. Это поместит ваш тэг ссылки в тело, как Microsoft говорит, что вы должны это сделать, но эстетически это не так приятно. Другой вариант - сделать что-то подобное в вашей Page_Load

var link = new HtmlGenericControl("link");
link.Attributes.Add("rel", "shortcut icon");
link.Attributes.Add("src", ResolveUrl("~/Resources/Pictures/Shared/Misc/favicon.ico"));
link.Attributes.Add("type", "image/x-icon");

Header.Controls.Add(link);

Это создает программный элемент управления программно, затем добавляет его в коллекцию элементов управления на голове, которая будет отображаться как то, что вы хотите в конце тега заголовка. Проблема в том, что это немного больше работы, и лучше избегать манипуляций с коллекциями элементов управления на уровне кода, если вам это удается.

3 голосов
/ 02 сентября 2011

Это может сделать его немного сложнее, чем нужно. Вы пробовали просто использовать ~ в значке пути и установить <head runat="server">?

Например:

<head runat="server">
    ...
    <link rel="icon" href="~/Resources/Pictures/Shared/Misc/favicon.ico" 
        type="image/x-icon" />
    <link rel="shortcut icon" href="~/Resources/Pictures/Shared/Misc/favicon.ico"
        type="image/x-icon" />
    ...
</head>

Схожий SO ответ : Фавикон не отображается

...