我有一个在 Visual Studio 2012 下开发的 ASP.NET Web 表单站点。有一个带有导航栏和指向 CSS 表的链接的母版页。Bot 使用应用程序根操作符“~”指定
<asp:PlaceHolder runat="server">
<%: Styles.Render("~/Content/themes/base/css", "~/Content/css") %>
</asp:PlaceHolder>
...
<li><a runat="server" href="~/Forms/SelectResults.aspx">Generate Table</a></li>
<li><a runat="server" href="~/BrowseDB.aspx">Browse DB</a></li>
浏览页面时,http://localhost/Forms/SelectResults.aspx
我发现“~”在这些情况下的解析方式不同:
<link href="/Content/site.css" rel="stylesheet" type="text/css" />
...
<li><a href="SelectResults.aspx">Generate Table</a></li>
<li><a href="../BrowseDB.aspx">Browse DB</a></li>
所以 CSS 的路径是绝对的,其他页面的路径是相对的。在本地主机上运行时,一切正常。但是在将我的站点部署到服务器后,它有一个地址http://MyDomain/MySite/
,因此它不在域根目录中。并且由于绝对路径,无法加载任何 CSS 文件!导航工作正常,但所有样式都被破坏了。
为什么“~”运算符在Styles.Render
指令中不起作用?这两个代码片段都是由标准的 ASP.NET 网站模板生成的,我没有修改任何内容。
网站是在 Visual Studio 2012、.NET Framework 4.5 下开发的。我的服务器规格是:
- 视窗 7 x64
- IIS 7.5
- 网站应用程序池框架 4.0