Asp.net разделитель <% заменен на <% в теге head?
Может быть, это глупый вопрос, но у меня есть эта проблема в Visual Studio 2010:
На главной странице у меня есть такой код:
<head runat="server">
<title>App Title</title>
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
<link href="<%= App.RootPath %>Css/style.css" rel="stylesheet" type="text/css" />
</head>
По какой-то странной причине <%
изменяется во время выполнения с <%
<%= App.RootPath %>
работает нормально, если положить в любом месте за пределами головы тега.
Кто-нибудь никогда не испытывал этого и не решался?
Обновление:
Если я отложу runat= "server" в теге head, это сработает. Но мне это нужно.
Правка:
Все эти методы работают, но проблема заключается в отсутствии поддержки дизайнера?
5 ответов:
Объяснение вашего трюка:
<link <%= "href='" +App.RootPath +"Css/style.css'" %> rel="stylesheet" type="text/css" />
Чтобы найти ответ, создайте исключение компиляции. Измените
Ваш трюк обманывает компилятор, что совсем неплохо.App.RootPath
наApp.RootPaths..
, затем перейдите к исходному коду (он будет показан на странице ошибок). Если компилятор соответствует чему-то вроде<link href='' rel='' >
, то он сгенерирует код для построения соответствующего экземпляраHtmlLink
. Вот почему он анализирует<%=
как литеральную строку и после этого кодирует ее.Я верю, что это так. то же самое и для метатегов, (
HtmlMeta
)
На данный момент я нашел этот workaroud; все еще ищу причину такого поведения.
<link <%= "href=" +App.RootPath +"Css/style.css" %> rel="stylesheet" type="text/css" />
Это тоже должно сработать.
<link href="<%= App.RootPath + "Css/style.css" %>" rel="stylesheet" type="text/css"/>