在头部内容和链接标签中使用代码块

时间:2010-02-01 15:40:20

标签: asp.net asp.net-mvc asp.net-mvc-2 themes link-tag

我正在使用主题构建一个asp.net应用程序,并且我已使用Web配置为应用程序分配了一个主题。

我有一个书签图标,我想用于我的页面,它位于主题目录中,但我无法从标题中的链接标记引用主题位置。

首先,我尝试在链接标记href元素中放置一个代码块,但这不起作用。相反,它所做的只是html编码<%字符并将其直接输出到浏览器:

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

我能够将代码块放在hr标记的元素中,所以我不知道它为什么不能在链接标记中工作:

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

然后我尝试在head标签内部执行Response.Write,但是我收到一条错误,说控件集合无法修改,因为控件包含代码块:

<% 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\"/>" %>

有没有办法从链接标记内的themes目录中引用某些内容?

我正在尝试在ASP.NET 2和ASP.NET 2 MVC应用程序中执行此操作。

6 个答案:

答案 0 :(得分:1)

这不起作用,因为您将其标记为 runat =“server”

试试这个

<link rel="shortcut icon" href="<%=ResolveUrl(string.Format("~/App_Themes/{0}/images/bookmark.ico", Page.Theme)) %>" type="image/x-icon"/>

答案 1 :(得分:1)

杰里米,

尝试创建一个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) %>

希望这会有所帮助...

吉姆

答案 2 :(得分:1)

您可以通过使用某个服务器元素包装脚本来删除内联代码:

<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>

答案 3 :(得分:0)

好的,我通过使用一些内联代码来实现它。内联代码不是我的第一选择,但我想要一个在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>

答案 4 :(得分:0)

你也可以这样做:

<head>
    <style type="text/css">
        @import "<%= ResolveUrl("~/content/styles.css") %>";
        @import "<%= ResolveUrl("~/content/print.css") %>" print;
    </style>
</head>

答案 5 :(得分:0)

I use this way. (Add dummy space into block):

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