none
背景文件的路径问题 RRS feed

  • 问题

  • 位于 解决方案 的 aaa 文件夹中, 有一个 aaa.ascx 文件, <div id = "ccc">, 在cs文件中,写下:
    HtmlLink HtmlLink1 = new HtmlLink();
                HtmlLink1.Href = "/aaa/cj/bbb.css";

                HtmlLink1.Attributes.Add("rel", "stylesheet");
                HtmlLink1.Attributes.Add("type", "text/css");
                this.Page.Header.Controls.Add(HtmlLink1);

    在 bbb.css 中 定义div 背景图:
    #ccc
    {
        background-image: url('../../aaa/Images/login_bg.png');}
    }


    以上写法, 在vs2010beta1 中通过.
    在vs2010beta2中, 运行时,看不到背景图, 不知道哪里路径出错了.
    • 已编辑 lfj0912 2009年11月3日 2:48
    • 已移动 孟宪会Moderator 2009年11月3日 9:28 (发件人:Web 相关讨论(IIS,IE8等))
    2009年11月3日 1:18

答案

  • 可能你的iis把js也交给了.net处理 当你添加了Forms验证未登录也就无法访问了

    你可以添加

    <location path= "~/aaa/cj/Login.js">
         <system.web>
         <authorization>
         <allow users= "*"/>
         </authorization>
         </system.web>
        </location>

    这个节点到Configuration节点下


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!My blog~~~
    • 已标记为答案 lfj0912 2009年11月3日 12:12
    2009年11月3日 7:44
    版主
  • 你的cj文件夹是否有个web.config文件( 如果没有可以新建) 你把它的验证设置     <system.web>
         <authorization>
         <allow users= "*"/>
         </authorization>
         </system.web>
    • 已标记为答案 lfj0912 2009年11月3日 12:12
    2009年11月3日 7:55
  • 问题找到了:
    在Web.config文件中,把以下字节屏蔽掉,就正常了.

        <authentication mode="Forms">
          <forms loginUrl="~/Account/Login.aspx" timeout="2880" />
        </authentication>

     再问一下:authentication 是不是判断用户是否登录 ,如果未登录,就跳到Login.aspx. 那它为什么会造成引用js文件失败?

    匿名用户没有权限当然要失败了啊。


    【孟子E章】
    • 已标记为答案 lfj0912 2009年11月3日 12:12
    2009年11月3日 9:26
    版主
  • 将你的css,js,images文件夹都使用location分开权限控制

    <location path= "aaa/cj"> 
         <system.web> 
         <authorization> 
         <allow users= "*"/> 
         </authorization> 
         </system.web> 
        </location>


    【孟子E章】
    • 已标记为答案 lfj0912 2009年11月4日 0:17
    2009年11月3日 9:28
    版主
  • obj.offsetTop 指 obj 相对于版面或由 offsetParent 属性指定的父坐标的计算上侧位置,整型,单位像素
    比如这个textbox的高度为10像素 而其父元素为一个div高度为11像素且textbox的vertical-align为bottom 那么offsetTop就为1
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!My blog~~~
    • 已标记为答案 lfj0912 2009年11月3日 14:59
    2009年11月3日 12:42
    版主

全部回复

  • 你改成
    HtmlLink1.Href = "~/aaa/cj/bbb.css";
    #ccc
    {
        background-image: url('../Images/login_bg.png');}
    }
    试试呢?

    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!My blog~~~
    2009年11月3日 2:07
    版主
  • 谢谢您!
    改了以后, 依然不见底图, 郁闷

    2009年11月3日 2:30
  • 应该是这句的路径问题:
    HtmlLink1.Href = "~/aaa/cj/bbb.css";

    连以下js文件都无法引用了
     HtmlGenericControl UserHgc = new HtmlGenericControl("Script");
                UserHgc.Attributes.Add("src", "~/aaa/cj/Login.js");

    2009年11月3日 3:07
  • ~只能用在服务器控件中,

    css里使用相对路径,是相对css文件位置的

    #ccc
    {
        background-image: url('../Images/login_bg.png');}
    }

    即可

    【孟子E章】
    2009年11月3日 5:36
    版主
  • UserHgc.Attributes.Add("src", "~/aaa/cj/Login.js");
    ~写在客户端,当然是错误的
    如果aaa是你的工程名称,这样写

    String Root =  Request.ApplicationPath == "/" ? "" : Request.ApplicationPath;
    UserHgc.Attributes.Add("src", Root  + "/cj/Login.js");

    【孟子E章】
    2009年11月3日 5:39
    版主
  • String Root =  Request.ApplicationPath == "/" ? "" : Request.ApplicationPath;
    HtmlLink1.Href = Root  + "/cj/bbb.css";
    【孟子E章】
    2009年11月3日 5:39
    版主
  • 谢谢孟老师!
            private void InsertCJ()
            {
                String Root = Request.ApplicationPath == "/" ? "" : Request.ApplicationPath;

                HtmlGenericControl UserHgc = new HtmlGenericControl("Script");           
                UserHgc.Attributes.Add("src", Root + "/aaa/cj/Login.js");
                UserHgc.Attributes.Add("type", "text/javascript");
                UserHgc.Attributes.Add("charset", "gb2312");
                this.Page.Header.Controls.Add(UserHgc);

                HtmlLink HtmlLink2 = new HtmlLink();
                HtmlLink2.Href = Root + "/aaa/cj/Stylesheet1.css";
                HtmlLink2.Attributes.Add("rel", "stylesheet");
                HtmlLink2.Attributes.Add("type", "text/css");
                this.Page.Header.Controls.Add(HtmlLink2);
            }
    这样照样无法找到js程序.  aaa不是工程名称, 是工程项目下的一个 子文件夹.
    等晚上我重新装一下系统, 再测试看看.

    2009年11月3日 6:09
  •  HtmlLink HtmlLink1 = new HtmlLink();
             HtmlLink1.Href = "~/aaa/cj/bbb.css";

             HtmlLink1.Attributes.Add("rel", "stylesheet");
             HtmlLink1.Attributes.Add("type", "text/css");
             this.Page.Header.Controls.Add(HtmlLink1); 
    这种方式是完全可以的

    对于Script

    HtmlGenericControl UserHgc = new HtmlGenericControl("Script");
                UserHgc.Attributes.Add("src", HostingEnvironment.ApplicationVirtualPath+"/aaa/cj/Login.js");
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!My blog~~~
    2009年11月3日 6:57
    版主
  • 谢谢孟老师!
            private void InsertCJ()
            {
                String Root = Request.ApplicationPath == "/" ? "" : Request.ApplicationPath;

                HtmlGenericControl UserHgc = new HtmlGenericControl("Script");           
                UserHgc.Attributes.Add("src", Root + "/aaa/cj/Login.js");
                UserHgc.Attributes.Add("type", "text/javascript");
                UserHgc.Attributes.Add("charset", "gb2312");
                this.Page.Header.Controls.Add(UserHgc);

                HtmlLink HtmlLink2 = new HtmlLink();
                HtmlLink2.Href = Root + "/aaa/cj/Stylesheet1.css";
                HtmlLink2.Attributes.Add("rel", "stylesheet");
                HtmlLink2.Attributes.Add("type", "text/css");
                this.Page.Header.Controls.Add(HtmlLink2);
            }
    这样照样无法找到js程序.  aaa不是工程名称, 是工程项目下的一个 子文件夹.
    等晚上我重新装一下系统, 再测试看看.

    是文件夹就加上文件夹名字
    这样照样无法找到js程序?
    是你程序本身有问题吧
    js文件里面只写一行
    alert("ok")
    测试

    【孟子E章】
    2009年11月3日 7:09
    版主
  • 问题找到了:
    在Web.config文件中,把以下字节屏蔽掉,就正常了.

        <authentication mode="Forms">
          <forms loginUrl="~/Account/Login.aspx" timeout="2880" />
        </authentication>

     再问一下:authentication 是不是判断用户是否登录 ,如果未登录,就跳到Login.aspx. 那它为什么会造成引用js文件失败?

    2009年11月3日 7:23
  • 可能你的iis把js也交给了.net处理 当你添加了Forms验证未登录也就无法访问了

    你可以添加

    <location path= "~/aaa/cj/Login.js">
         <system.web>
         <authorization>
         <allow users= "*"/>
         </authorization>
         </system.web>
        </location>

    这个节点到Configuration节点下


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!My blog~~~
    • 已标记为答案 lfj0912 2009年11月3日 12:12
    2009年11月3日 7:44
    版主
  • 你的cj文件夹是否有个web.config文件( 如果没有可以新建) 你把它的验证设置     <system.web>
         <authorization>
         <allow users= "*"/>
         </authorization>
         </system.web>
    • 已标记为答案 lfj0912 2009年11月3日 12:12
    2009年11月3日 7:55
  • 问题找到了:
    在Web.config文件中,把以下字节屏蔽掉,就正常了.

        <authentication mode="Forms">
          <forms loginUrl="~/Account/Login.aspx" timeout="2880" />
        </authentication>

     再问一下:authentication 是不是判断用户是否登录 ,如果未登录,就跳到Login.aspx. 那它为什么会造成引用js文件失败?

    匿名用户没有权限当然要失败了啊。


    【孟子E章】
    • 已标记为答案 lfj0912 2009年11月3日 12:12
    2009年11月3日 9:26
    版主
  • 将你的css,js,images文件夹都使用location分开权限控制

    <location path= "aaa/cj"> 
         <system.web> 
         <authorization> 
         <allow users= "*"/> 
         </authorization> 
         </system.web> 
        </location>


    【孟子E章】
    • 已标记为答案 lfj0912 2009年11月4日 0:17
    2009年11月3日 9:28
    版主
  • 谢谢大师们!
    还有一个问题:
    this.TextBox1.Attributes.Add("onfocus", "GetTop('" + this.TextBox1.ClientID + "')");

    function GetTop(Element1) {
        alert(document.getElementById(Element1).offsetTop);
    }

     以前可以用 offsetTop 获取到控件的顶点, 现在为什么无法获取, 每次都是1.

    2009年11月3日 10:58
  • obj.offsetTop 指 obj 相对于版面或由 offsetParent 属性指定的父坐标的计算上侧位置,整型,单位像素
    比如这个textbox的高度为10像素 而其父元素为一个div高度为11像素且textbox的vertical-align为bottom 那么offsetTop就为1
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!My blog~~~
    • 已标记为答案 lfj0912 2009年11月3日 14:59
    2009年11月3日 12:42
    版主