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