闲来无事,系统要升级,引进新东西,这个就是MasterPage。姐以前只是用过,但是真未深究其优点和不足之处。
首先说FrameSet,它是一个页面的框架,将这个页面分成几个框。如下面的例子:
<html> <noframes> <body> 很抱歉,馈下使用的浏览器不支援框架功能,请转用新的浏览器。 </body> </noframes> <frameset border="1" borderColor="#47478d" rows="90,*" style="margin:0px" > <frame src="frmHeader.aspx"name="header" scrolling="auto" id="header" style="margin:0px; z-index:2;" > </frame> <frameset border="1" frameSpacing="1" borderColor="#47478d" cols="170,*"> <frame src="frmLeft.aspx" name="left" scrolling="no" id="left"> </frame> <frame src="Contract/frmContractReportList.aspx" name="main" scrolling="no" id="main"> </frame> </frameset> </frameset> </html>
frameset下面套着frame。上面的例子是一个上,左,右的结构。它不能和Body一起用,也就是说它不能放在Body中,有的浏览器无法识别FrameSet,就只能加上<noframes>那一段了。
本来我用了这个,在上面那个Frame中放了一个Menu,带下拉式的Menu。后来发现由于上面的框设置了固定高度,当鼠标经过菜单时,那个下拉式的菜单竟然放不下下拉出来的项,只能缩在那,高度不够啊,它只在自己的框中显示,不会把下拉的菜单占用其他框来显示,哭死啊。彻底抛弃了。
而且查了资料,Frameset越来越受冷落了,估计页面传递信息不方便。受冷板凳了。。。。
其他说Frame,它是和FrameSet一起用的,如上例。
再来说IFrame,这个东西目前好像还是比较受欢迎的,很多的后台系统的主页中都会用IFrame,菜单一点击,Iframe的页面就变更。这样主页的其他内容无需再次加载,比如菜单,比如登陆人的信息。估计都是大爱啊。
但是它还是有缺点的。好像IFrame这个东西在不同浏览器展现效果不同,估计得多花时间调样式吧。搜索引擎是无法搜索到IFrame页面中的信息的。想要推广自己的网站估计就大亏了,因为你将爬虫拒之门外了。
最后说MasterPage,它是母版页,能把公共的信息写到母版中,其他页面只需继承它就好了,这样每个页面都无需写一堆相同的代码了。特别是公共的JS引用,Css引用,ScriptManager,UpdateProgress,其他类似的东西(只是每个页面赋值不同),这些都扔进MasterPage。
如果是相同的东西,但是无需每个页面都加载一次,这些就不要扔进MasterPage,这是因为其他页面继承了MasterPage,其他页面刷新时,MasterPage也会刷新,就会从数据库再次读取数据,再次绑定。当然用了缓存的话,可以不用每次将MasterPage中信息再次从数据库读,那就从缓存读,但是至少也得再次绑定啦。这还真是比较恶心的 问题。
姐就亲自试了一遍,将主页中上方菜单、左边的快捷链接都放了MasterPage,其他页面就都继承MasterPage,彻底抛弃IFrame。却发现每次页面加载,MasterPage都加载,可是那是菜单,固定不变的,哪需要每次读数据库,再绑定菜单啊。引用缓存,只能稍微好点。但是效果还是不如IFrame的好。
所以姐的这种情况,还是IFrame比较好。
既然上头说要用MasterPage,姐还是得让它用上,So,姐就还是用Iframe,只是Iframe中的页面总是还会有些公共的东西,比如JS,CSS,Asp.net Ajax的框架性控件都扔进去了,这样就不用每个页面都引用JS,加入ScriptManager,UpdateProgress控件。
刀还是得用在刀刃上 ,每一种东西必然有它的独到之处,若放弃它的独到性,去用其他的替代品,必然要付出一定的代价。那就是多花时间,多写代码。
通过试了这三种方式,姐对它们真的有深刻的体会了。