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

本文介绍了一种在母板页与内容页不在同一目录时,通过使用HTML的base标签来解决相对路径问题的方法。该方法涉及设置base标签的href属性为母板页所在目录的绝对路径,以及确保表单action属性指向正确的绝对路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所谓异目录就是只母板页与内容页不在同一目录。

实现的关键技术技术: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 %>/../

获得当前内容页所在目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值