2010-04-06 3 views
2

Okay,ResolveUrl Проблема в мастер-странице

Я знаю, что это странно, но когда я ставлю этот код между <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> 
    <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> 

ответ

4

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

Есть два способа справиться с этим. Сначала необходимо указать 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); 

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

+0

Я попробовал второй уже, но это ничего не меняет. Средство управления визуализировало его так, как оно хочет в конечном итоге. И да, я просто поместил элемент link под тегом '', и он сработал. – Tarik

3

Возможно, это будет немного сложнее, чем должно быть. Вы пробовали просто использовать ~ в пути значка и установить <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 ответить: Favicon Not Showing