在正常的WebForms场景中,任意根相对URL(例如〜/文件夹/ file.txt的)内部 CSS文件,如:
.form { background-image: url(~/Content/Images/form_bg.gif); }
如果我指定,将在运行时自动解析
在引用页面中.
但是,ASP.NET MVC Beta1网站上不再发生这种情况.
有没有办法我可以启用此功能而不诉诸黑客或CSS加载器文件?可能像HttpModules或其他东西?
或者我没有正确地设计我的网站?什么应该是一个好的设计?
由于原始的ASP.NET WebForms已经具有此功能,因此我更愿意使用任何现有功能.但我没有太多线索.
此Web应用程序将部署在~root文件夹可能不明显的多个环境中.
编辑:我的意思是文件的CONTENT中的url而不是文件的url本身.
我不打扰自动寻根~
角色.我知道您希望在部署之间根目录不同的地方使用相同的解决方案,但在CSS文档中,使用相对路径时不应该有任何问题.CSS文档中的路径(到示例中的图像URL)将始终相对于CSS文件的位置,而不管加载该CSS文件的任何页面的路径如何.因此,如果您的图像在,~/Content/Images
并且您的样式表在~/Content/Stylesheets
,您将始终能够使用background-image: url(../Images/form_bg.gif);
,无论加载样式表的页面位置如何,它都将起作用.
有什么理由不行吗?
我过去使用的一个技巧是实际上使我的CSS文件具有.ASPX扩展名,并在页面签名中设置ContentType属性:
<%@ Page Language="C#" ContentType="text/css" %> body { margin: 0; padding: 0; background: #C32605 url(<%= ResolveUrl("~/Content/themes/base/images/BodyBackground.png") %>) repeat-x; font-family: Verdana, Arial, sans-serif; font-size: small; color: #d7f9ff; }
这将确保CSS文件通过ASP.NET框架,并用您的相对路径替换服务器端代码.