zoukankan      html  css  js  c++  java
  • 用户控件和href,src及其css路径问题

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Header.ascx.cs" Inherits="DarwinPortal.UserControls.Header" %>
    <link href="<%=ResolveUrl("~/css/global.css")%>" rel="stylesheet" type="text/css" />
    <a class="logo" href='<%=ResolveUrl("~/Default.aspx") %>' title="Dextrys Home">Dextrys Home</a>


    head.ascx:
    <LINK href="css/css.css" type="text/css" rel="stylesheet">
        调用head.ascx
    <td background="images/bar_bg.gif"><SCRIPT language="JavaScript" src="js/fade.js"></SCRIPT>
    <table >
    </table>
    </td>
    <asp:Image Runat="server" id="Image1" ImageUrl="../images/标题.gif"></asp:Image>
    <img src="images/背景.gif">
    <td background="images/背景.gif">//没办法解决这个路径问题

    问题1:


    现在我们发现Image与img在指定图片路径时写法不同。
    <asp:Image   ImageUrl= 前面加了../
    <img src=直接用images

    为什么么。

    我们来分析一下
          index.aspx在最终生成HTML时。head.ascx实际上是加载到了根目录,所以head.ascx与images目录是同级的。

          img标签用的直接是html代码了。所以它在图片在指定路径时不要加../

          而<asp:image 是服务器控件。如果不给它加../images那么在生成最终页面后。将生成
         http://localhost/inf/UserControl/images/标题.gif
          而不是
         http://localhost/inf/images/标题.gif。而且<asp:image 比较智能。它能根据加载自己的页面的位置,动态调整最后生成的HTML。保证图片路径不错。

    最后我们实试一下。我们发现http://localhost/inf/index.aspx中所有图片正常,而http://localhost/inf/模块1/其它.aspx 中<asp:Image 显示正常,而<img 不正常。


    问题1解决方法:
       A:所有图片都用服务器控件<asp:Image 。但是对于那些作为<td 单元格背景的图片就没办法了
       B:或是不要分目录,所有aspx全扔在根目录。(完全解决。所有的问题都不是问题。但是是最垃圾的方案,整个程序目录结构真烂)


    问题2:
    现在,图片的问题基本解决。但是另忘记了。head.ascx中还有一段css和js脚本。当然要解决的话,在调用head.ascx的页面上自己加上,把路径写对就是了。

    但是现在看
    <td background="images/bar_bg.gif"><SCRIPT language="JavaScript" src="js/fade.js"></SCRIPT>
    <table >
    </table>
    </td>
    这一段。
    这个JS脚本很特殊,它希望只作用在<td></td>这前的那个table上。如果在整个页面都加的话。那么作用的范围就改变了。

    获取DNS主机名或者IP地址:  
    HttpContext.Current.Request.Url.Host  
       
    获取虚拟程序根路径:  
    HttpContext.Current.Request.ApplicationPath  
       
    这两部分合起来就是你的虚拟站点名称了。

    <asp:Image ID="Image1" runat="server" ImageUrl="~/Images/head.JPG" />

    (1)、发现利用服务器控件不会出现任何问题。服务器端路径服务器端可以自动转化,如果你加入ResolveUrl会发现反而画蛇添足!
    <img src='../Images/head.JPG' alt="测试" />

    2)、如果用了HTML控件,条件是:如果一个用户控件目录里中有一个用户控件,此用户控件利用HTML控件来显示其他目录里的图片,此时如果此用户控件拖放到根目录上的网页时,不能正确显示图片,此时必须用ResolveUrl方法,就不会出现问题。写法是:<img src='<%=ResolveUrl("../Images/head.JPG") %>' />
    <img src='<%=ResolveUrl("../Images/head.JPG") %>' alt="测试" /

    (3)、如果你要在html代码中与数据库中的数据帮定,比如一个链接,则可以写成:
    <a href='<%# ResolveUrl("~/Default.aspx?Param=") + Eval('DataItem')%>'>返回</a>
    如果你是在后台代码写,比如一个链接,则可以写成:Lable1.Text="<a href="+this.ResolveUrl("../view.aspx?id=")"+Id+">查看</a>"
    (我也是在写后台代码遇到了这个问题,所以才写这篇文章的)

    结论:一句话,如果你用html控件或html标签最好加上ResolveUrl方法,以防止出错;如果是用服务器控件就不用考虑 ResolveUrl方法了。

    .ascx只是一个控件,它需要aspx承载,也就是.ascx生成的连接等都要相对于承载ascx的aspx为准!

    <a href="../a.aspx">a.aspx</a>表示你要从引用ascx的页面连接到它的上一级目录中的a.aspx,所以找不到是正常的!如果control文件夹;和该文件夹并列的有a.aspx和b.aspxc.aspx三个页面都在站点的根目录就不会有错,如果它们在整个站点的虚拟目录或实际目录下就会有错!也就是说http://www.cnblogs.com/这类的东西只对目录有效,对站点无效!
    如果你觉得你对路径没有把握,建议你使用asp:HyperLink 这样,你就可以使用~/来表示根路径了~~~

  • 相关阅读:
    js FormData 的使用
    js代码 注释 test
    JavaScript创建对象的几种 方式
    js prototype 原型
    C# 遍历对象下的 属性
    C#模拟按键
    C#获取硬盘序列号
    C#结束Explorer进程
    Java书籍推荐
    编程资料合集
  • 原文地址:https://www.cnblogs.com/geass/p/1923743.html
Copyright © 2011-2022 走看看