您的位置:首页 > 编程语言 > ASP

ASP母板页与内容页的异目录使用

2012-11-06 18:27 204 查看
所谓异目录就是只母板页与内容页不在同一目录。

实现的关键技术技术:html的base标签

关键技术讲解:

base的href规定页面中所有相对链接的基准 URL。其值是个绝对路径。我实现的方法是取 协议+主机名+端口号+路径。

不过,这样设置了之后会存在二个问题。

第一:页面回发的时候会出错。出错的根本原因是回发的原理。其根本原理是表单的提交,而form表单的action是当前页面的名字。

解决方案:action指定绝对路径

第二:内容页的链接不能采用相对路径。

解决方案:Request.Url.ToString().Substring(0, Request.Url.ToString().LastIndexOf('/')+1)获得其所在路径

好了,下面附上完整步骤:
1.在母板页head部分添加标签

<base id="baseHref" runat="server" />

注意:runat="server"一定不可少,要在后台修改其href值

2.母板页后台填加函数setBaseHref,在 Page_Load 中掉用,可以是做页面是否是回发判断,影响不大。

/// <summary>

/// 设置母板页的路径

/// </summary>

/// <param name="path">

/// 从根目录开始,母板页的路径

/// 如母板页所在路径为~/Admin/*.Master

/// 则path应为Admin

/// </param>

void setBaseHref(string path)

{

//给base标签href属性设置母板页所在目录

string url = Request.Url.ToString();

string serverPath = url.Substring(0, url.IndexOf("/", url.IndexOf("://") + 3) + 1);

serverPath += path + "/";

baseHref.Attributes["href"] = serverPath;

//找到form元素,并给action赋绝对路径

HtmlForm myForm = null;

foreach (Control c in Controls)

{

if("HtmlForm".Equals(c.GetType().Name))

{

myForm = (HtmlForm)c;

break;

}

}

myForm.Action = Request.Url.ToString();

}

3.内容页添加有相对路径,或使用有相对路径的跳转时。

后台 Request.Url.ToString().Substring(0, Request.Url.ToString().LastIndexOf('/')+1)

前台<%= Request.Url %>/../

获得当前内容页所在目录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: