在相对参考中使用物理路径作为根

时间:2013-07-25 20:44:20

标签: asp.net iis-7 relative-path

这可能是一个初学者IIS问题,但我的应用程序在加载css文件时遇到问题。

我创建了一个名为iisstart2.htm的测试页面,其中包含三个链接,以查看它将获取参考资料的位置

<link type='text/css' rel='stylesheet' href='~/site1.css' />
<link type='text/css' rel='stylesheet' href='/site2.css' />
<link type='text/css' rel='stylesheet' href='site3.css' />

我制作了两份副本并将它们放在这里:

  • C:\inetpub\wwwroot
  • C:\inetpub\wwwroot\ParentLevel

在“编辑网站”设置中,我将物理路径设置为C:\inetpub\wwwroot\ParentLevel

当我浏览第一个(http://localhost/iisstart2.htm)时,这里是查找css文件的地方:

enter image description here

当我浏览到嵌套的(http://localhost/ParentLevel/iisstart2.htm)时,它看起来在这里

enter image description here

当一个链接以/开头时,它会一直回到根目录,但我想象它应该做的就是在http://localhost/ParentLevel/site2.css找到site2.css

问题

我可以在哪里更改默认的根目录?

1 个答案:

答案 0 :(得分:1)

~是您想要的"application root operator"。但它只能用于服务器控件。只需添加runat="server"即可:

<link runat="server" type='text/css' rel='stylesheet' href='~/site1.css' />

修改:显然上述内容不适用于linkscript代码 - 我不知道为什么。但您可以使用MapPath,这相当于:

<link type='text/css' rel='stylesheet' 
    href='<%= HttpContext.Current.Server.MapPath("~/site1.css") %>' />

或者,您可以使用辅助方法,其优点是可以轻松地移动所有引用。类似的东西:

<link type='text/css' rel='stylesheet' href='<%= Application.GetCssPath("site1.css") %>' /> 

其中

public namespace GlobalUtil
{
    public class Application
    {
        public static string GetCssPath(string relPath)
        { 
            return System.Web.Configuration.ConfigurationManager.AppSettings["CssPath"] + relPath;
        }
    }
}

为此,您还希望在GlobalUtil中注册web.config命名空间;以及无重新编译更改的CssPath设置:

<appSettings>
  <add key="CssPath" value="/ParentLevel/" />
<appSettings>

<system.web>