• Master page Path (MasterPage 路径)


    MasterPage路径
    ------------------

    From: http://hi.baidu.com/%B7%E7%D3%EA%B9%CA%C8%CB/blog/item/897ac13582b06c1090ef39e3.html
    关于masterpage中图片路径的问题,
    如果引用相对路径http://www.cnblogs.com/XXX.gif那么会出现如果继承了masterpage的其他页面出现了目录分级情况的话引用不到图片。
    如果运用绝对路径~/XXX.gif那么当挂在了虚拟目录下的时候也会出现问题
    一个解决方法是在APP_CHEME目录下建立一个css文件,在其中运用
    .HideBar
    {    
         background: url(http://www.cnblogs.com/pic/custom_images/delval_top_new.jpg);
    }
    然后在模板标签中需要引用图片的地方中引用class="HideBar",这样在模版计算路径的时候会从css路径开始计算而css路径总是固定的所以可以避免继承的时候所出现的混乱,而在虚拟目录下由于路径是从下往上计算的所以也不会出现问题
    ------------------
    From:http://www.cnblogs.com/lijunming/articles/522747.html
     ASP.Net 2.0 MasterPage中路径的处理
    用VS.Net2005开发ASP.Net 2.0应用程序时,提出了MasterPage的概念,相当于模板。
    在一个MasterPage中设定文件的路径,当不在相同目录下的文件使用这个MasterPage时对该路径的链接会出问题,此时使用相对路径是不适宜的。
    可以使用下面的方法进行处理:
    string _url = Page.Request.Url.ToString();
    string _ret = _url.Substring(0, _url.ToLower().IndexOf("/你的虚拟目录名称/", 0)) + "/你的虚拟目录名称/";
    这样得到的_ret即为Web项目的绝对路径,可以在此基础上添加对项目中任何文件路径的链接。
    使用ToLower()方法是为了避免Url的大小写问题,我们指定的虚拟目录名称可能是大小写字母都有的,而用户录入的就是另外一回事情了,很可能全部是小写的。
    ------------------
    From: http://www.ninedns.com/asp.net/2007102520419.html
    ASP.NET MasterPage 中图片路径的解决办法
    一般而言,链接路径的表达有三种方式:绝对路径、相对路径和基于根目录的路径。另外对于ASP.NET服务器控件来说,还可以使用“~”来代替根目录来表示。
    在MasterPage和用户控件中,经常要使用一些图片作为背景或漂亮的按钮,但是在指定图片的src或者background时候,经常因为链接路径的问题而出错。
    1.使用绝对路径:使用形如“D:"xxx"xxx.gif”的绝对文件路径一般情况下是不可取的。可以考虑采取url的方法,写成http://xxxx/xx/xxx.gif”。但是缺点是不利于移植,例如现在站点的地址为http://www.xxx.net,如果有一天站点更该http://www.xxx.com,则所有的链接地址都失效,需要进行更改,难以维护。
    2. 使用相对路径:使用相对于页面位置的路径,比如“.."images"xxx.gif”,这样MasterPage和用户控件中都能正确显示,但是如果将继承MasterPage的页面放到不同的文件夹下,或者使用用户控件的页面不在同一文件夹,那么该页面又会找不到正确的图片位置了!
    3.基于根目录的路径:形如:<a href="/xxx/xxx.gif">这样的解决方法在ASP.NET2.0调试的时候,因为没有建立虚拟目录,并不能正确显示(我也不是很肯定,没有确认^_^)。而我在非服务器控件的HTML标签元素上无法使用“~”来指定路径。
    那么,在设计时让图片可见,我们应该怎么来处理呢?我采用了CSS来完成这项工作。针对要显示图片的元素和控件,我们可以写一段简单的css来定位图片,因为css文件的位置是一般不会改变的(位于 App_Theme/themename/xxx.css),这种方法也就行之有效了。
    .HideBar
    {
        height:56px;
        5px;
        cursor:hand;
        background-image: url(http://www.cnblogs.com/images/xxx.gif);       
    }接下来我们只需要在相应的元素和控件的cssclass中填入HideBar,就可以做到每个继承MasterPage或使用用户控件的页面都能正确显示图片了。
    我想应该还有其它更好的办法,也希望有人能指点一二。
    ——Robin Lu's Blog
    ------------------
    From: http://superkam.blog.163.com/blog/static/228256482008316560726/
        .NET 2.0的MasterPage相当方便,但是如果不同路径的页面引用MasterPage的话,在MasterPage中设置的相对路径会发生错误。比如 MasterPage路径为 domain/TestMasterPage.master ,而MasterPage中引用了一个相对地址 ../admin/Default.aspx  ,如果 domain/admin/Test.aspx 继承自这个MasterPage的话,继承后的 Test.aspx 页面中的地址会变成 domain/admin/admin/Default.aspx ,这不是我们想要的。当然可以用 <%=ResolveClientUrl("~/admin/Default.aspx ") %> 的方式取回绝对地址,不过链接过多的话这样写也很麻烦。
        解决这个问题可以通过编写一个页面基类,在基类中识别地址并自动转换。以下是基类代码。
    public abstract class PageBase : Page   
        {  
            protected override void Render(HtmlTextWriter writer)  
            {  
                StringWriter stringWriter = new StringWriter();  
                HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);  
                base.Render(htmlWriter);  
                string html = stringWriter.ToString();      
       
                #region 转换相对路径  
                MatchCollection collection = Regex.Matches(html, "<(a|link|img|script|input|form).[^>]*(href|src|action)=(""""|’|)(.[^""""’]*)(""""|’|)[^>]*>", RegexOptions.IgnoreCase);  
     
                foreach (Match match in collection)  
                {  
                    if (match.Groups[match.Groups.Count - 2].Value.IndexOf("~") != -1)  
                    {  
                        string url = this.Page.ResolveUrl(match.Groups[match.Groups.Count - 2].Value);  
                        html = html.Replace(match.Groups[match.Groups.Count - 2].Value, url);  
                    }  
                }  
                #endregion  
                writer.Write(html);      
            }      
        }
        基类做好后,让刚才的 domain/admin/Test.aspx 页面继承这个基类(MasterPage不用继承它),在页面中只要出现 ~/ 开头的地址,都会自动转换成绝对地址(~/admin/Default.aspx 将被自动转换成 domain/admin/Default.aspx)。这样在MaterPage中均使用 ~/ 开头的地址,继承自它的其他页面都可以获得正确的绝对地址了。
    ------------------
    From: http://forums.asp.net/t/1054133.aspx
    Specifying javascript file path on Master pages
    <link runat="server" href="~/scripts/myfile.js" />
    <script type="text/javascript" src='<%=ResolveUrl("~/swfobject.js")%>'></script>
    ------------------
    From: http://mosalem.blogspot.com/2006/07/master-page-and-content-page-path-in.html
    if (Request.CurrentExecutionFilePath.ToLower().Contains("/admin/"))
    {
      //not in the same folder
      boddy.Style[HtmlTextWriterStyle.BackgroundImage] = "../images/bg.gif";
    }
    else
      boddy.Style[HtmlTextWriterStyle.BackgroundImage] = "images/bg.gif";
    ------------------
    From: http://www.codeverge.net/ng.asp-net-forum.master_pages_themes_and_navigation_controls/masterpage-path-for-scripts
    1. for css
      <link runat="server" href="~/css/css.css" rel="stylesheet" type="text/css" />
    2. for javascript, check following thread
      http://forums.asp.net/thread/1390505.aspx
    ------------------
    From: http://www.csharper.net/blog/using_the_tilde__~__in_asp_net_everywhere___not_just_controls_.aspx
    Using the Tilde ( ~ ) in ASP.NET Everywhere - Not Just Controls!
    protected override void Render(HtmlTextWriter writer)
    {
        MemoryStream ms = new MemoryStream();
        StreamWriter sw = new StreamWriter(ms);
        HtmlTextWriter htw = new HtmlTextWriter(sw);

        base.Render(htw);
        htw.Flush();
        ms.Position = 0;

        TextReader tr = new StreamReader(ms);
        string output = tr.ReadToEnd();
        string newOutput = ReplaceWithAppPath(output);
        writer.Write(newOutput);
        
        htw.Close();
        sw.Close();
        ms.Close();
    }

    public static string ReplaceWithAppPath(string str)
    {
        string appPath = HttpContext.Current.Request.ApplicationPath;

        //Ensure the app path ends w/ a slash
        if(!appPath.EndsWith("/"))
            appPath += "/";

        return str.Replace("~/", appPath);
    }
    ------------------
  • 相关阅读:
    Asp.Net 合并图片(二维码和其他图片合并)
    Asp.Net 隐藏手机号中间四位为*方法
    Linux后台运行进程 node screen
    nginx 实现负载均衡
    Python 字典递归合并
    搭建Elasticsearch环境,logstash环境
    搭建Elasticsearch环境,搭建kibana 环境
    flask mysql sqlalchemy教程
    MySQL数据库+命令大全+常用操作
    Python开发单元测试,必不可少
  • 原文地址:https://www.cnblogs.com/emanlee/p/1333818.html
Copyright © 2020-2023  润新知