ASP.NET MVC区域中样式表中的相对路径

6

我有一个当前结构的项目

My Project
  /Content
  /Controller
  /View
  /Model
  /Areas
     /Area1
        /View
        /Controller
        /Model
     /Area2
        /View
        /Controller
        /Model

所有区域视图都使用一个根共享的 _Layout 视图,该视图引用了根内容目录下的一个 css 文件。 内容文件夹中的 css 文件引用与其同一目录下的图片或其他内容,如下所示:
.box-shadow
{
    -webkit-box-shadow: 0px 5px 80px #505050;
    -moz-box-shadow: 0px 5px 80px #505050;
    box-shadow: 0px 5px 80px #505050;
    behavior: url('../Content/PIE.htc');
}

这一切在我访问'http://MyProject/controller/action'时都很好,但当我进入一个区域'http://root/area/controller/action'时,我的CSS文件无法找到路径'../Content/PIE.htc'。
我不知道如何解决这个问题,所以想知道是否有人知道如何解决。
谢谢!

“.htc”?那不是IE特有的垃圾吗?它有一个错误,它使用相对于当前URL而不是相对于CSS路径的当前位置。 - Darin Dimitrov
你尝试过不加“../”吗?如果你的CSS文件在Content文件夹中,就不应该使用“../”。 - Tobias
是的,这就是它正在做的事情 @DarinDimitrov - zSynopsis
我已经尝试了两种方式,@Tobias。 - zSynopsis
2个回答

2
如果所有区域中的视图都使用根共享的_Layout (~/Views/Shared/_Layout.cshtml),请确保_Layout.cshtml像以下代码一样调用css文件:
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />

我在MVC 3上进行了测试,它可以工作。


被引用在 CSS 中的文件路径有问题。我可以正确获取到 CSS 文件的路径。 - zSynopsis

1

关于这个问题,有两篇有用的Stack Overflow帖子:在MVC中使用css3pie,在哪里放置pie.htc文件?当我使用cakephp时,我应该把PIE.htc文件放在哪里(使IE与CSS3兼容),而且PIE网站也有一个关于它的讨论

IE解释behavior属性的URL是相对于源HTML文档的,而不是相对于CSS文件像其他CSS属性一样。这使得调用PIE行为变得不方便,因为URL必须是以下之一:

相对于域根目录的绝对路径 - 这使得CSS在不同目录之间不容易移动

相对于HTML文档的路径 - 这使得CSS在不同HTML文件之间不容易重用。

到目前为止,我最好的想法是在整个站点中拥有一个CSS目录,将PIE.htc文件放置其中,并使用绝对路径引用它。虽然不是很理想,但也不算太糟糕。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接