использование блоков кода в заголовке и тегах ссылок - PullRequest
2 голосов
/ 01 февраля 2010

Я создаю приложение asp.net с использованием тем и назначил тему приложению с помощью веб-конфигурации.

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

Сначала я попытался поместить блок кода в элемент href ссылки тегов, который не работал. Вместо этого все, что он сделал, это html-кодирование символов <% и вывод его прямо в браузер: </p>

<link rel="shortcut icon" href="/App_Themes/<%=Page.Theme %>/images/bookmark.ico" type="image/x-icon" runat="server"/>

Я могу разместить блок кода внутри элемента в теге hr, поэтому я не знаю, почему он не будет работать в теге ссылки:

<hr test="<%=Page.Theme %>"/>  

Затем я попытался выполнить Response.Write внутри тега head, но получил ошибку, указав, что коллекцию Controls нельзя изменить, поскольку элемент управления содержит блоки кода:

<% Response.Write("<link rel=\"shortcut icon\" href=\"/App_Themes/" + Page.Theme + "/images/bookmark.ico\" type=\"image/x-icon\"/>"); %>

Я также попробовал это только со строковым литералом, и получил ту же ошибку:

<%= "<link rel=\"shortcut icon\" href=\"/App_Themes/" + Page.StyleSheetTheme + "/images/bookmark.ico\" type=\"image/x-icon\"/>" %>

Можно ли ссылаться на что-либо из каталога тем внутри тега ссылки?

Я пытаюсь сделать это в приложении ASP.NET 2 и ASP.NET 2 MVC.

Ответы [ 6 ]

1 голос
/ 17 апреля 2012

Вы можете избавиться от встроенного кода, обернув свой скрипт некоторым серверным элементом:

<head runat="server">
   <title>My Test App <title>
   <div runat="server">
      <link rel="shortcut icon" href="/App_Themes/<%=Page.Theme %>/images/bookmark.ico" type="image/x-icon" runat="server"/>
   </div>
</head>
1 голос
/ 02 февраля 2010

Jeremy,

попробуйте создать помощник html, например:

public static string SetThemeIcon(this HtmlHelper html, string themename)
{
    var filePath = VirtualPathUtility.ToAbsolute("~/App_Themes/" + themename + "/images/bookmark.ico");
    return "<link rel=\"shortcut icon\" href=\"" + filePath + "\" type=\"image/x-icon\"/>";
}

тогда, в вашем представлении или главной странице, просто сослаться на это так:

<%= Html.SetThemeIcon("test") %>

или как в вашем случае выше (в MVC):

<%= Html.SetThemeIcon(String.IsNullOrEmpty(Page.Theme) ? Page.StyleSheetTheme : Page.Theme) %>

надеюсь, это поможет ...

джим

1 голос
/ 01 февраля 2010

Это не будет работать, потому что вы пометили его как runat = "server"

попробуйте вместо этого

<link rel="shortcut icon" href="<%=ResolveUrl(string.Format("~/App_Themes/{0}/images/bookmark.ico", Page.Theme)) %>" type="image/x-icon"/>
0 голосов
/ 12 октября 2017

Я использую этот способ. (Добавьте пустое место в блок):

<link href="<%=""+RootUrl%>_ui/css/font-awesome.min.css" rel="stylesheet"> <link rel="shortcut icon" href="<%=""+RootUrl%>_ui/favicon.ico" />

0 голосов
/ 26 июня 2012

Вы также можете сделать это:

<head>
    <style type="text/css">
        @import "<%= ResolveUrl("~/content/styles.css") %>";
        @import "<%= ResolveUrl("~/content/print.css") %>" print;
    </style>
</head>
0 голосов
/ 01 февраля 2010

Хорошо, я получил это с помощью встроенного кода. Встроенный код не мой первый выбор, но я хотел, чтобы решение работало и в mvc Вот что я придумал:

<head runat="server">
    <title>My Test App <title>
    <script language="CS" runat="server">
        void Page_Load(object sender, System.EventArgs e) 
        {
            string sTheme = String.IsNullOrEmpty(Page.Theme) ? Page.StyleSheetTheme : Page.Theme;
            litFacIcon.Text = "<link rel=\"shortcut icon\" href=\"/App_Themes/" + sTheme + "/images/bookmark.ico\" type=\"image/x-icon\"/>";
        } 
    </script>
    <asp:Literal ID="litFacIcon" runat="server"></asp:Literal>
</head>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...