不知大家在使用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刷新问题
- 已有 人阅读此文 - 2015.06.06 - WEB前端开发 - 萤火星
- 上一篇:Frameset使用教程
- 下一篇:php文件|文件夹操作