一个Asp.net项目,用到了母版页,母版页中的Header部分是这样写的:<head runat="server">
    <title></title>
    <link href="Css/layout.css" rel="stylesheet" type="text/css"/>
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>    注意这句:<link href="Css/layout.css" rel="stylesheet" type="text/css"/>。这是一个link标签,标签以相对路径的方式引用layout.css文件。而且这个标签不带runat="server"标记,它应该是一个普通的Html标记。
可生成网页后,查看网页源代码,我发现根据引用这个母版页的内容页的位置不同,这个link标签href属性会自动变化,比如变成:<link href="../Css/layout.css" rel="stylesheet" type="text/css"/>,或者变成<link href="../../Css/layout.css" rel="stylesheet" type="text/css" />等等。母版页内的link控件不带runat="server"标记,可Asp.net依然动态处理了它。
    我又试了试<script>、<a>等标签,发现这些标签就得不到上述待遇。大家遇到过类似现象么?如果谁知道更多细节,恳请赐教。

解决方案 »

  1.   

    你查看的是内容页的源码,它来自母版页,那个CSS文件是母版页引用的,不带“../”,而点内容也就相当于又加了一层路径吧??
    个人认为
    等高手
      

  2.   

    如果不你不想用让它带上..得话,引用得时候用/目录/css.css就可以了。在目录前面加上/就表示得是网站的根目录
      

  3.   

    突然注意到了一点,虽然link标签不带runat="server",但link标签的老爸header标签是带runat="server"标记的,通过对header标签的动态改变,Asp.net是可以做到动态变化link内容的。我试了试把header的runat="server"去掉,果然,link标签就死了。
    有趣的是,header标签只特殊照顾它里面的link标记,对<a>、<script>标记则持非亲生态度,不动态处理。
      

  4.   

    楼上各位说得有道理。
    实际生成的页面中这个路径是以子页面的位置来定位的,而不是母版页。。可以用ResolveUrl
    更方便的方法是路径前加“/”定位到站点根目录。
      

  5.   

    母版页里的link标签,不用写ResolveUrl,也不用加runat="server"标签,就已经自动获得ResolveUrl的效果了。这不是更方便么?