2010-02-01 120 views
1

我正在构建一个使用主题的asp.net应用程序,并且我已经使用web配置为应用程序分配了一个主题。在头部内容和链接标记中使用代码块

我有一个书签图标,我想用于我的页面,它位于主题目录中,但我在引用标题中链接标记的主题位置时遇到问题。

首先,我试着把一个代码块放在链接标签href元素里面,这没有奏效。相反,它所作的只是HTML的<%字符和输出编码直接到浏览器:

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

我能够把一个代码块的元素在里面一个小时标签了,所以我不知道为什么它不会工作在一个链接标签:

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

然后我试图做head标签内的Response.Write,但我得到了一个错误说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应用程序中都这样做。

+0

你能告诉我们什么是从你的第一个例子呈现给浏览器?如果您的应用程序存储在一个子目录中,则会因为您的链接指向根目录而弹出。如果这不是问题,呈现给浏览器的html可能会保存密钥。 – 2010-02-01 16:03:58

+0

NickLarsen - 它会渲染<%= Page.Theme%>我的代码块被指定。 – Jeremy 2010-02-01 18:07:34

回答

1

这是行不通的,因为你将其标记为RUNAT = “服务器”

试试这个,而不是

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

也不起作用。仍然得到错误控件集合不能被修改,因为控件包含代码块(即)。 – Jeremy 2010-02-02 18:50:57

+0

你能告诉我你整个标签是什么样子吗? – hunter 2010-02-02 19:02:52

+0

如果你的head标签中有runat =“server”并且你添加了其他任何控件,那么你不能按照我的建议去做 – hunter 2010-02-02 19:03:41

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

​​3210

希望这有助于...

吉姆

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

看起来您可以将runat = server放在元素上,但不能将绑定标记嵌入到href属性的中间,因为它们会以编码html的形式呈现出来。如果我在开始时放置一个〜,它确实会呈现应用程序根目录。 – Jeremy 2012-04-23 22:43:25

+0

感谢这个有用的提示。最好的祝福。 – 2017-10-12 10:02:22

0

你也可以这样做:

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

我用这样的方式。 (添加虚拟空间分成块):

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

相关问题