• 首页
  • ASPCMS
  • DEDECMS
  • DuxCms
  • 工具下载
  • SEO知识
  • WEB前端开发
  • 当前位置:首页 > WEB前端开发 >
  • WEB前端开发
  • Frameset刷新问题

  • 已有 人阅读此文  -  2015.06.06  -  WEB前端开发  -  萤火星
  不知大家在使用Frameset框架结构时,出现过这种情况:只要一刷新主框架,显示主要内容的子框架跳回到初始页面(即Welcome.aspx)。
  
  产生原因:
  其实都是asp文件惹的祸,因为框架文件是asp,所以当刷新的时候就向服务器要,所以将原来的index.asp解释给你了;
  把总框架网页改成.htm格式,问题解决!但是htm格式一点都不实际,根本不能满足我们需求,我们往往需要对页面进行好多的处理且于服务器进行交互,那框架文件是asp怎么办啊?
  
  这个问题困扰了我将近一天的时间,在网上找个半天,试了更重办法,不是解决不了,就是实现比较复杂。在研究过程中我也是有了一丝灵感后,巧妙的利用Session就解决问题,实现非常简单,但并没有达到完美效果,有一个遗留问题,在我介绍完方法后,会告诉大家这个缺陷。
  
  下面是我主框架【Main.aspx】的代码:
  <htmlxmlns="http://www.w3.org/1999/xhtml">
  <headrunat="server">
  <title>无机网络教学后台管理系统</title>
  </head>
  <framesetrows="70,*"border="0">
  <framesrc="TopFrame.aspx"name="TopFrame"id="TopFrame"scrolling="No"noresize="noresize"/>
  <framesetcols="213,*">
  <framesrc="LeftFrame.aspx"name="LeftFrame"id="LeftFrame"scrolling="No"noresize="noresize"/>
  <framesrc="Welcome.aspx"name="ContentFrame"id="ContentFrame"runat="server"/>
  </frameset>
  <noframes>
  <body>
  </body>
  </noframes>
  </frameset>
  </html>
  
  子框架【LeftFrame.aspx】的部分代码
  <body>
  <div>
  <table>
  <%--其他代码略--%>
  <tr>
  <td>
  <ahref="Teacher.aspx"target="ContentFrame">教师</a>
  </td>
  </tr>
  </table>
  </div>
  </body>
  
  解决办法:
  Main.aspx.cs文件代码
  protectedvoidPage_Load(objectsender,EventArgse)
  {
  if(!IsPostBack)
  {
  if(Session["url"]!=null)
  {
  ContentFrame.Attributes["src"]=Session["url"].ToString();
  }
  }
  }
  
  Teacher.aspx.cs文件代码【此为子框架ContentFrame中显示的某一个子页面】
  protectedvoidPage_Load(objectsender,EventArgse)
  {
  if(!IsPostBack)
  {
  Session["url"]=Request.RawUrl;
  }
  }
  代码思路:
  在子框架ContentFrame中要显示的所有子页面的Page_Load事件中利用Session把当前页面的链接地址记录下来,在主框架Main.aspx页面的Page_Load事件中再利用Session把子框架ContentFrame的链接src属性动态更新。
  就是说只要子框架ontentFrame的页面内容更变,Session就会记录下当前子页面的链接地址,主框架刷新后都会从Session中读取子框架中链接地址。
  
  缺陷问题:
  如果用户点击了几次LeftFrame中的链接,并按了浏览器的“返回”按钮,此时再刷新页面,我们会发现ContentFrame中显示的页面异常【具体自己可以试试】。
  因为单击浏览器的“返回”按钮,ContentFrame中的页面信息是利用页面的缓存实现的,并没有与服务器进行交互,也就并没有将“返回”后的页面链接更新到Session中,所以再刷新会回到Session中存储的地址链接。
  这个问题,目前我暂时放下了,因为我得抓紧时间去完成功能,以后会再处理这个具体细节,肯定要在Session中下手的。
  
  最后,我想和大家说,要灵活运用自己所学的知识,这个问题我在网上找了很长的时间,也试过很多的方法,正如我开篇所说,不是没作用就是实现比较复杂而弄不清楚逻辑(自已也不愿去太深入读别人的代码),所以最后就靠自己了,自己想了想能不能利用以前自己所学去解决这问题,然后通过回忆以及联系发现session可能就能解决问题,结果试了一下,还真的成功了!哈哈哈!【网上我可没见过有谁利用session实现的,那么麻烦,比如说利用cookie】
  
  另外,关于frameset的使用方法,可以参见Frameset使用教程
如果本篇文章帮到了你,那么,请点击右侧的百度分享,让我们一起帮助更多的朋友!
  • 上一篇:Frameset使用教程
  • 下一篇:php文件|文件夹操作
前端交流群
热门文章
  • 1php文件|文件夹操作
  • 2PHP中获取当前页面的完整URL
  • 3Frameset使用教程
  • 4Frameset刷新问题
  • 5使用js验证中国第二代身份证
推荐阅读
  • php文件|文件夹操作
  • CSS3 Transition
ASPCMS | DEDECMS | DuxCms | 工具下载 | SEO知识 | WEB前端开发 | 百度地图
萤火星的经验分享!友情赞助!
鲁ICP备15006695号-1