用户控件与外部CSS文件

时间:2013-08-30 04:46:40

标签: asp.net css user-controls

我的Web应用程序的根目录中有一个ASCX用户控件。它引用了一个样式表,如

<link type="text/css" rel="stylesheet" href="MyStyle.css" />

问题是,如果位于应用程序子文件夹中的任何ASPX页面引用该用户控件 - 它们看不到样式表,因为href路径是相对的,样式表仍保留在应用程序根目录中。

除了将CSS复制到所有子文件夹以通用引用它之外,还有其他方法吗?我没有问题引用外部JavaScript,使用ScriptManagerProxy我可以通过ASP.NET“〜/”表示法指定外部JS文件的路径,它可以从任何位置解析为实际路径。 CSS有类似的东西吗?

4 个答案:

答案 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文件,然后你可以在你的代码中使用它