当启动我的asp.net网站的调试模式时,它会在我的浏览器中使用url
进行渲染http://localhost:111/mywebsite/Default.aspx
在html
中引用了css文件<link href="~/css/style.css" runat="server" rel="stylesheet" type="text/css" />
网站自然会中断,因为它会在localhost:111/css/
而非localhost:111/mywebsite/css
/中查找CSS文件。
当我启动网站时,它实际上将从网址提供:
http://mywebsite.com
那么有没有办法在我的开发和制作区域中使用简单的前缀<?=$site_url ?>
或其他东西正确引用我的样式表?
其他信息
在我的解决方案资源管理器中,我看到我的项目标有路径C:\...\mywebsite
。这就是~
假设我的项目总是在子目录中的原因吗?我如何告诉Visual Studios这个项目应该总是像http://localhost:111/Default.aspx
那样?
这是我在本地主机和生产服务器的页面源中看到的:
<link href="~/css/style.css" rel="stylesheet" type="text/css"></link>
。 css在生产时是活动的,但不是我的本地主机。
答案 0 :(得分:1)
这样就可以了。
<link href="<%=ResolveUrl("~/css/style.css")%>" runat="server" rel="stylesheet" type="text/css" />
答案 1 :(得分:1)
我去了解决方案资源管理器,然后选择了标有C:\...\mywebsite
的树中的项目,然后我转到VS右下角的“属性”窗口,并将虚拟路径更改为/
。现在我的开发网站的根目录与我的prod网站的根目录相同。
答案 2 :(得分:0)
您已经拥有,~
在呈现网页时解析为网站的根目录。
进一步阅读:http://weblogs.asp.net/fmarguerie/archive/2004/05/05/avoiding-problems-with-relative-and-absolute-urls-in-asp-net.aspx(适用于chrome,FF和IE)。
~
在服务器上解析(这就是您需要runat="server"
)的原因
运行此代码以生成来自HTTP请求的响应,该请求来自您的dev服务器,该服务器从磁盘上项目的位置托管站点。
~
并不假设该网站位于子目录中,开发服务器将知道该网站的根目录。
在生产环境中,IIS将从服务器计算机磁盘上的另一个位置托管该站点。
答案 3 :(得分:-1)
将其更改为:
<link href="/css/style.css"" rel="stylesheet" type="text/css" />
删除 runat="server"
(如果您不需要 )。
而不是 href="~/css/style.css"
: href="/css/style.css"
href="/css/style.css"
表示您网站的 root 中有一个名为 css 的文件夹,另一个名为 style.css 的文件它
<强>更新强>
正如评论所指出的,此解决方案仅在您的应用以root用户身份运行时才有效。