menu 无刷新

            在大家都红红火火的用上了Ajax之后,许多地方真的是有了很大变化,实现了网页无刷新,感觉真的是很棒;也许是项目需要吧!在很多时候我用到了Menu,有时候用Menu来代替Button真的是很方便。

            但在有一次我碰到了这样一个问题,我所用到的Menu有2级菜单,我开始还没有意识到,照以前的样子
拉了ScriptManager , UpdatePanel ,把Menu 就放里了 ,也是我太粗心了,随既开始写程序, 都完成之后一次通过,正高兴,鼠标放到了Menu 上, 2级菜单弹了出来,往旁边一移,先前菜单收回,新菜单收起。恩,还不错,点一下吧!果然无刷新,但这时候我再把鼠标放到Menu的时候,可就难看了,鼠标往右面用力一滑,所有的2级菜单都出来了,并且都不往回收,终于收起来了却留下了痕迹,怎么回事。

            后来我上网搜索,发现其实Menu就是为了导航使用,应该发生整体页的Post,放在了UpdatePanel底下自然发生错误!这可怎么办,以前没发现是因为都用的是一级菜单做Button用了。

            整整2小时,才搞明白了,把Menu放到UpdatePanel外面也可以实现无刷新,以前其实也知道,怎么没想到呢,在UpdatePanel 的属性里面有一个 UpdateMode ,它有两个值,always 和 Conditional
always 的时候意思是 任何updatepanel 内的控件(包括自己内的)发生post 事件,都会引起 UpdatePanel 的更新
Conditional则只有在设置了Triggers属性的时候,在其定义的控件才可以引起AsyncPostBackTrigger和PostBackTrigger两种行为,当然要引起PostBackTrigger(整个Post)只有在这个UpdatePanel 内的,而且能够引发Post的控件才能被设置,而AsyncPostBackTrigger则可以设置别的UpdatePanel内的和不在任何UpdatePanel内的所有控件ID。

            这样做虽然可以实现Menu的无刷新,但有一个弊端,需要把所有其他被Menu引发的变化的所有控件放在UpdatePanel内,并把UpdatePanel设置成Conditional,并且要把Triggers 内 的AsyncPostBackTrigger行为加上Menu的Id,无形中加了许多工作。

            所以我在用到Ajax的时候很小心,能不用的地方我尽量不用了,在这里告诉大家一个另外一个防刷新的方法,呵呵,其实就是以前浏览器自带的方法。

            meta 中的 http-equiv 属性 ,<meta http-equiv="Page-Enter" contect="revealTrans(duration=10,transtion= 50)">和<meta http-equiv="Page-Exit" contect="revealTrans(duration=20,transtion=6)">设定进入和离开页面时的特殊效果,这个功能即FrontPage中的“格式/网页过渡”,不过所加的页面不能够是一个frame页面。

            

Duration的值为网页动态过渡的时间,单位为秒。
Transition是过渡方式,它的值为0到23,分别对应24种过渡方式。如下表:
0 盒状收缩 1 盒状放射
2 圆形收缩 3 圆形放射
4 由下往上 5 由上往下
6 从左至右 7 从右至左
8 垂直百叶窗 9 水平百叶窗
10 水平格状百叶窗 11垂直格状百叶窗
12 随意溶解 13从左右两端向中间展开
14从中间向左右两端展开 15从上下两端向中间展开
16从中间向上下两端展开 17 从右上角向左下角展开
18 从右下角向左上角展开 19 从左上角向右下角展开
20 从左下角向右上角展开 21 水平线状展开
22 垂直线状展开 23 随机产生一种过渡方式

呵呵,但是得客户端支持才行啊,如果禁止了,则不会有任何效果,又是刷新时候的大白屏了。

posted on 2007-04-25 20:16  执法长老  阅读(658)  评论(0编辑  收藏  举报

导航