zoukankan      html  css  js  c++  java
  • asp.net路径问题

    -------------初级篇----------------------------------------
    在一般的href中路径的引用问题
      ./index.aspx与index.aspx都代表当前文件夹
       /index.aspx 代表从域名直接定位到这个路径
      ~/index.aspx代表智能感知这个文件的虚拟路径
      ../index.aspx代表上一层文件路径
    -------------进阶篇----------------------------------------
    在用模板页的时候容易遇到路径的问题
    1 ./index.aspx如果放在服务器控件中不会有错.但如果放在一般的标签中就会出错了,因为它会到内容页的当前目录去找,可我们设置的时候,是想让它到模板页的目录去找.
    2 /index.aspx 因为这个绕过了相对的当前路径,所以很不错,但是也有一个小小的问题,那就是iis5.1,iis6.0,vs自带的iis在域名解析这一块有点小差别.iis5.1当下面有多个虚拟根目录时,由于在访问时又加了一层目录,所以会出错,iis6.0由于可以通过设置多个端口来发布不同的网站,所以虚拟的根目录不可见,路径和它无关,所以就不会出问题,而内置的iis也启用了虚拟的根目录,这样有可能调试时没有问题,发布时却有了问题,在iis6.0上没有问题,在iis5.1上就有了问题,可移植不好.
    3 ~/index.aspx这个根据路径在整个虚拟目录中智能感知他的路径,很不错的
    结论:1所以在模板页中,要用服务器端的控件,然后再用./index.aspx和~/index.aspx,只用这样才不会出现问题
    ----------------高级篇-------------------------------------------
    母版页引用外部文件的路径问题
    在母版页中引用的外部文件不外乎css 和js 文件, css文件比较简单, 因为它的路径是相对于母版页的位置而言的, 而js 则不然, 它是相对于内容页而言的.
    举个例子, 有下面的文件树:

    root
     |_master.master
     |_content1.aspx
     |_js1.js
     |_folder1
         |_content2.aspx

    在应用程序的根下面, 有一个母版页master.master, 一个内容页content1.aspx, 一个js文件js1.js, 另外, 还有一个处于folder1子目录下的另一个内容页conten2.aspx,  则, 在母版页中引用js1.js 时, content1 的相对路径就是当前目录, 直接写文件名就行了, 可是对content2来说,  js1.js 处于它的上层目录, 相对路径要写作: ../js1.js  , 由于此js 文件是在母版页中的引用的, 所以这个相对路径就没办法直接写了.

    解决办法有:
    1. 直接写绝对路径.

    <script type="text/javascript" src="//virtualPath/js1.js"></script>
    这种做法是我极度反感, 并且无法忍受的, 因为它使得虚拟目录的名字无法改变, 而且事实上, 我们公司应用程序的名字和正式服务器上虚拟目录的名字是不同的, 所以这种方法要么在开发阶段无效, 要么在运行阶段无效, 除非应用程序名和虚拟目录名总是一样, 并且虚拟目录名不会改变, 否则不应该这样引用js.

    2. 在服务器端注册.

    Page.ClientScript.RegisterClientScriptInclude("js1.js", Page.ResolveClientUrl("~/js1.js"));
    aspx页面中可以使用<%=Page.ResolveUrl("~/")js1.js%>但是不知道为什么不能用在master中

    这种做法的缺点也是明显的, 首先, 它必须放在page_load 之类的事件处理器中, 每次回发都执行一次,  其次, 这样引用后, 在页面上写js代码时, 无法智能感知到已经引用的js 文件, 减慢编程速度, 而且一大堆警告也不是什么赏心悦目的事件.

    3. 用ScriptManager 引用

        <asp:ScriptManager ID="sm1" runat="server">
            <Scripts>
                <asp:ScriptReference ScriptMode="Auto" Path="~/Js1.js" />
            </Scripts>
        </asp:ScriptManager>
    这种引用是可以智能感知到的, 目前为止也没发现有什么副作用, 是推荐的解决方案.

    --

    昨天漏写了图片url的路径问题, 图片url 也是相对于内容页的, 所以在客户端并没有特别好的办法, 我的建议是直接给img 控件加个runat="server" 属性, 例如:
     <img alt="" src="images/img.gif" runat="server" />
    这样, 服务器就会自动给它生成正确的url.

    另外, 如果在样式中指定了背景图片之类的, 建议放入css文件中, 在css文件中, url() 里面的相对路径是相对于css文件本身的, 而如果放入母版页中, 则就变成了相对于内容页了.  例如:

    母版页中:

    <table class="css1">

    css文件:

    .css1
    {
        background-image:url(../images/1.jpg);
        background-repeat:no-repeat;
    }
     
    而如果把这两个样式放在table的style中, 就只有跟母版页路径相同的内容页才能正确显示.

  • 相关阅读:
    SQL Server DB 基于多核CPU的设置
    如何在64位的Windows 2008的系统配置导入Excel功能
    如果在IIS中没有将虚拟目录配置为应用程序,则可能导致此错误
    .NET 数据绑定中空格符的问题
    .net 读取客户端文件的方法
    spring4+quartz
    web端 图片上传
    Maven配置setting.xml详细说明
    Timer
    实现quartz定时器及quartz定时器原理介绍
  • 原文地址:https://www.cnblogs.com/disneyland/p/4133375.html
Copyright © 2011-2022 走看看