当前位置:编程学习 > C#/ASP.NET >>

ASP.NET 主题配置 绝对路径

web.config里使用<pages theme="Default" />后,在每个aspx页面打开后都会自动在HTML的HEAD头加入Link标签.

例如<link rel="stylesheet" type="text/css" href="App_Themes/Default/Default.css">

 

因为用了URL重写,URL路径十分的复杂,需要这个配置主题情况下自动添加的Link标签中的href属性前面加 (  /  )以指示根路径.


例如<link rel="stylesheet" type="text/css" href="App_Themes/Default/Default.css">

变成<link rel="stylesheet" type="text/css" href="/App_Themes/Default/Default.css">

FrameWork默认生成出来的Link标签Href里的路径是相对路径,可否有什么办法让生成的Href里的路径为 / 开头的绝对路径? --------------------编程问答-------------------- 没必要的吧,直接写成绝对路径省心。 --------------------编程问答-------------------- --------------------编程问答-------------------- 这样访问不到你的主题CSS吗? --------------------编程问答-------------------- 直接自己写有点麻烦..

要的就是如何改变当配置的<pages Themes="Default"/>时,FrameWork自动生成的那个Link标签的Href地址变成 
/开头的绝对路径..

1楼我也想直接写,但是这个Link标签不是我写的,是FrameWork自动生成的..

另外,非常有必要,因为我是全重写URL的.. 任何请求我都自己手动处理然后跳转的..

而且使用FrameWork的Theme架构能方便我动态更换皮肤... --------------------编程问答-------------------- 回复2楼..

相对路径确实访问不到..

比如客户端的请求为这样的.
http://localhot/ABC//////@#$@#^@#///@#$

这个时候相对路径就傻了.. 因为地址栏多出的/导致相对路径的Href获取不到图片还有CSS... --------------------编程问答-------------------- 暂时解决问题了..

重写Page的呈现子控件函数
附代码:

protected override void Render(HtmlTextWriter writer)
{
  foreach (Control control in Page.Header.Controls)
  {
    HtmlLink  link;

    link = control as HtmlLink;
    if ((link != null) && link.Href.StartsWith("~/"))
    {
      if (Request.ApplicationPath == "/")
        link.Href = link.Href.Substring(1);
      else
        link.Href = Request.ApplicationPath+"/"+link.Href.Substring("~/".Length);
    }
  }
  base.Render(writer);
}


不过这种方式不好..

页面多的话得一个一个解决..
而且这种方式浪费性能,FrameWork先生成,然后我再用代码转换.浪费开销..

国外网站有介绍说通过 compilation 的 buildProviders 来解决.
没怎么看懂,可否有达人解释解释.
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,