4

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

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

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

除了将 CSS 复制到所有子文件夹中以从根目录普遍引用它之外,还有其他方法吗?我引用外部 JavaScript 没有问题,使用 ScriptManagerProxy 我可以通过 ASP.NET“~/”表示法指定外部 JS 文件的路径,该符号可以从任何位置解析为真实路径。CSS是否存在类似的东西?

4

4 回答 4

7

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"/>
于 2013-09-01T11:30:40.693 回答
7

正如我在评论中提到的,我不想使用 <%= %> 块。但是我也不想在代码隐藏中分配 CSS 文件的 URL,所以我找到了一个折衷方案。我用属性和 ASP.NET 声明<link>标签runat="server"- 样式 href:

<link rel="stylesheet" type="text/css" runat="server" id="xlinkCSS" href="~/MyStyle.CSS" />

然后在代码隐藏中简单地解决该链接

xlinkCSS.Attributes("href") = ResolveUrl(xlinkCSS.Attributes("href"))

使用这种方法,我最终可以创建一个接受页面作为参数的函数,循环遍历所有“链接”标签,解析它们的 URL。

于 2013-09-02T17:06:49.997 回答
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" />
于 2013-09-01T10:48:23.967 回答
-2

你应该制作 bundle.config 文件,然后你可以在你的代码中使用它

于 2013-08-30T04:51:27.463 回答