我的Web应用程序的根目录中有一个ASCX用户控件。它引用了一个样式表,如
<link type="text/css" rel="stylesheet" href="MyStyle.css" />
问题是,如果位于应用程序子文件夹中的任何ASPX页面引用该用户控件 - 它们看不到样式表,因为href路径是相对的,样式表仍保留在应用程序根目录中。
除了将CSS复制到所有子文件夹以通用引用它之外,还有其他方法吗?我没有问题引用外部JavaScript,使用ScriptManagerProxy我可以通过ASP.NET“〜/”表示法指定外部JS文件的路径,它可以从任何位置解析为实际路径。 CSS有类似的东西吗?
答案 0 :(得分:6)
ResolveUrl将为您转换应用程序相对URL。 http://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveurl.aspx
<link href="<%= ResolveUrl("~/MyStyle.css") %>" rel="stylesheet" />
编辑:如果您不想使用内联代码块
代码隐藏
protected void Page_Load(object sender, EventArgs e)
{
litStyle.Text = string.Format("<link href=\"{0}\" rel=\"stylesheet\" />", ResolveUrl("~/MyStyle.css"))
}
标记
<asp:Literal ID="litStyle" runat="server"/>
答案 1 :(得分:6)
正如我在评论中提到的,我不想使用&lt;%=%&gt;块。但我不想在代码隐藏中分配CSS文件的URL,所以我找到了妥协。我声明<link>
标签带有runat="server"
属性和ASP.NET - 样式href:
<link rel="stylesheet" type="text/css" runat="server" id="xlinkCSS" href="~/MyStyle.CSS" />
然后在代码隐藏中简单解析链接
xlinkCSS.Attributes("href") = ResolveUrl(xlinkCSS.Attributes("href"))
使用这种方法最终我可以创建一个接受页面作为参数的函数,循环遍历所有“链接”标签,解析它们的URL。
答案 2 :(得分:1)
实际上你有两个选择:
1-将它包含在您的主题文件夹中,然后asp.net框架将自动将其包含在使用此主题的所有页面中
2-在CS代码中添加包含路径的公共变量,然后在代码中使用它,如下面的代码所示:
public string basepath = "http://" + Request.Url.Authority + Request.ApplicationPath;
然后在ASP代码中使用它:
<link type="text/css" rel="stylesheet" href="<%=basepath %>MyStyle.css" />
答案 3 :(得分:-2)
你应该制作bundle.config文件,然后你可以在你的代码中使用它