主页CSS链接无法解决〜

时间:2011-11-01 21:32:10

标签: c# asp.net master-pages link-tag

我正在使用C#ASP.net中的Web界面。如果重要,我正在使用XHTML 1.0 Transitional。

这个网站有一个主页的东西,这就是问题的来源。当我在标题中使用一个真正的绝对路径的CSS链接时,一切都很好。但是当我试图将它切换到波浪符号时,所有造型都破了。

这是原始母版页的一个片段,工作正常:

<head>
    <title>Account Information</title>
    <link href="/css/main.css" rel="stylesheet" type="text/css" />
</head>
<body>
...
</body>

但后来我们发现这个帐户的东西将是一个不在服务器根目录上的应用程序,因此我们不得不进行更改。

<head>
    <title>Account Information</title>
    <link runat="server" href="~/css/main.css" rel="stylesheet" type="text/css" />
</head>
<body>
...
</body>

现在,那些相同的更改(添加runat =“server”和代字号)在页面中的其他任何地方都起作用,但是这个没有。当我查看输出时,它没有解析波浪号,因此链接实际上指向“myserver.net/~/css/main.css”,这显然不起作用。

接下来我尝试使用ResolveURL,如下所示:

<link runat="server" href="<% =ResolveURL("~/css/main.css") %>" rel="stylesheet" type="text/css" />

Visual Studio甚至不会编译它。它甚至不知道ResolveURL的含义。 (作为测试,我在其他几个地方粘贴了相同的代码,包括链接标记旁边的页面标题,并且在其他任何地方都可以正常工作!)

我最终通过给链接提供ID并在代码隐藏中设置href来使其工作:

--Master page--
<link id="StyleLink" runat="server" rel="stylesheet" type="text/css" />

--Masterpage codebehind file--
StyleLink.Attributes.Add("href", ResolveUrl("~/css/main.css"));

但是我想知道为什么我要花两个小时与之抗争。为什么标准符号首先不起作用?我用谷歌搜索了一段时间,但我找不到任何特别相关的东西;我能找到的最接近的是当它在子母版页中时,#notation失败的讨论。

3 个答案:

答案 0 :(得分:5)

这在我面前的母版页中起作用:

<head runat="server">
     <link runat="server" href="~/styles/main.css" rel="stylesheet" type="text/css" />
</head>

对于应用程序根目录中的页面,这将转换为HTML,如下所示:

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

对于根目录下的文件夹中的页面,这是它的样子:

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

(显然,这两个页面都使用了Master)


替代方法

将路径存储到Web配置中的CSS文件,并在部署时更改它。
您甚至可以使用 Web Config Transformations 根据构建类型自动更改它。

答案 1 :(得分:1)

我猜这可能是应用程序范围的问题。换句话说,当您运行<link rel='stylesheet' href='~/css/base.css' id='id' runat='server'>时,应用程序可能会返回类似这样的内容

http://www.mydirectory.com/includes/masterpages/css/base.css

你希望得到像这样的回报

http://www.mydirectory.com/css/base.css

因为〜获取了应用程序根目录并附加了它,如果它没有保存在根目录中,你可能会收到主页面所在的错误。

这是我引用的SO问题的链接,用于解释问题。 slash(/) vs tilde slash (~/) in style sheet path in asp.net

我不知道为什么它不会在链接标记中的可能未闭合的引号之外进行编译,即。 <link type='text/css" href="..." runat="server" />注意类型中的单引号与双引号关闭。我偶尔也这样做过,但我只是在这里猜测。我在我的网上检查了它并使用runat服务器放入〜不会导致编译时错误。

答案 2 :(得分:0)

我使用以下语法链接到母版页中的CSS文件

 <link  href="~/bm/Styles/Site.css" rel="stylesheet" type="text/css" />

路径在Chrome和Firefox中正确解析,但在IE9中没有。以下语法适用于所有三种浏览器。注意id和runat条目。

<link id="siteCss" runat="server"
      href="~/bm/Styles/Site.css" rel="stylesheet" type="text/css" />