SmartNavigation在Fx2.0中下岗了...

简介:

当我们在最开始接触ASP.NET时,除了被.NET的整个框架和code-behind的代码方式吸引之外,同时对一些M$提供的cookies也非常的欣赏。其中SmartNavigation特性就是大家印象比较深的,不过这个cookie的使用和它受到的期望却相去甚远,这是为什么呢?微软在Framework 2.0里又是怎对待它的呢?

    关于Page类的SmartNavigation属性的原理、问题以及改进,我曾写了一个系列文章在2004年9月份,同时有幸受约发表于《开发高手》期刊。现在来看Fx1.0/1.1中实现的SmartNavigation特性,用一句话:中看不中用。来评价,是不算太过分的。虽然这个功能的创意和实现是挺不错的,不过它实际使用的问题实在是太多了,可以看看这篇文章了解一二。那么我们在Framework 2.0 beta2中,还要继续使用这个特性吗?

    现在我们在Framework 2.0 beta2中再使用SmartNavigation特性,将会得到一个编译时warning。因为Page.SmartNavigation这个属性已被标注为Obsolete了。同时,Framework 2.0建议我们使用一个叫做MaintainScrollPositionOnPostBack的Page属性来代替SmartNavigation。名字真是无比的啰嗦,它是干什么的呢?就做和我后来弄个那个ClientNavigation一样的事情,在页面提交后,保持Scroll Bar的位置在新的Response页面中。

    MaintainScrollPositionOnPostBack的实现原理和ClientNavigation基本相同,区别是前者是通过处理Page,即整个页面的返回内容的更改来实现的,而ClientNavigation以一个控件方式提供。这都无所谓了,具体看了一下前者的实现,还是有一个地方是值得学习的,就是获取ScrollBar的位置的代码,代码片断如下:

function WebForm_GetScrollX() 
{
     if (__nonMSDOMBrowser) 
    {
         return window.pageXOffset;
    }
     else 
    {
         if (document.documentElement && document.documentElement.scrollLeft) 
        {
             return document.documentElement.scrollLeft;
        }
         else  if (document.body) 
        {
             return document.body.scrollLeft;
        }
    }
     return 0;
}

    如此简单的代码,有什么问题呢?只细看else分支,为什么不直接返回document.body.scrollLeft,要啰哩啰唆搞得这么复杂?因为这里有一个IE的bug(我曾在开发TreeView控件,然后把TreeView放在Frame中时遇到过),在某些情况下,我们滚动了滚动条通过document.body.scrollLeft取不到ScrollBar的位置值,这个属性总是为"0"。那么我们就都用document.documentElement.scrollLeft来取不就行吗了?这里这样做微软是为了考虑向下兼容性,因为document.documentElement属性是IE5.0以后才提供的。另外就是,回传的ScrollBar位置,通过两个预置的hide field搞定:

< input  type ="hidden"  name ="__SCROLLPOSITIONX"  id ="__SCROLLPOSITIONX"  value ="0"   />
< input  type ="hidden"  name ="__SCROLLPOSITIONY"  id ="__SCROLLPOSITIONY"  value ="365"   />


    MaintainScrollPositionOnPostBack和ClientNavigation都是一种非常轻便的解决方法,使用这种新的方法,基本避免了原来SmartNavigation中的所有问题,同时MaintainScrollPositionOnPostBack还支持cross-browser。新实现方式,唯一的一个小问题是如果页面篇幅太长或载入速度太慢,会有一个页面跳跃的扰动,当然这点小缺陷和正确、稳定、轻便比起来就不是什么大问题了。



目录
相关文章
|
存储 机器学习/深度学习 搜索推荐
探索医学影像:如何通过ROI灰度直方图和ROI区域方格图揭示隐秘细节?
探索医学影像:如何通过ROI灰度直方图和ROI区域方格图揭示隐秘细节?
968 1
|
8月前
|
消息中间件 JavaScript 前端开发
详解事件循环与浏览器渲染机制
摘要:浏览器采用多进程架构,渲染主线程通过事件循环机制处理HTML解析、样式计算、布局等任务。异步机制避免主线程阻塞,任务按优先级在微队列、交互队列等不同队列中调度。JS执行会阻碍渲染,因其与渲染任务共享主线程。渲染流程包含解析、样式计算、布局、分层等阶段,最终由合成线程和GPU完成绘制。transform效率高因其仅影响合成阶段,不涉及主线程。reflow是布局重计算,repaint是绘制指令更新,两者均影响性能。
|
6月前
|
存储 缓存 Java
01.计算机组成结构原理
本专栏以真实线上事故切入,系统讲解计算机组成原理:从五大硬件部件、冯·诺依曼体系(含存储程序思想、哈佛对比、瓶颈与优化),到指令执行、性能公式、功耗墙及阿姆达尔定律,辅以按键显示等综合案例,助程序员建立扎实硬件直觉。
451 0
|
6月前
|
传感器 计算机视觉 开发者
FOC(磁场定向控制)的Simulink仿真模型实现
FOC(磁场定向控制)的Simulink仿真模型实现
521 0
|
7月前
|
移动开发 小程序 定位技术
php开发的社交同城交友系统架构分享(附源码演示)交友成品源码搭建简易步骤解析!
基于PHP+UniApp的同城交友系统,低成本高效率,支持小程序/H5/APP多端一键部署。涵盖智能匹配、LBS定位、音视频聊天、动态社区及VIP变现等全功能模块,开箱即用,合规安全,是创业者首选落地方案。
486 0
|
6月前
|
存储 安全 网络安全
APP运营服务器配置全攻略:从选型到网络安全,你需要知道的一切
服务器配置与网络安全是APP稳定运营的双重基石:前者决定响应速度与高并发承载力,后者守护用户数据与业务安全。本文系统解析CPU/内存/带宽/存储选型、分阶段配置策略、云原生架构及WAF/RASP/零信任等纵深防御体系,助您构建高性能、高可用、高安全的APP基础设施。(239字)
|
11月前
|
人工智能 运维 监控
光伏EPC增收新路径:智能运维系统解决方案全景解析
光伏EPC企业面临低价竞争、利润下滑困境,传统工程模式难以为继。需向长期运营服务商转型,破解“内卷”。智能运维成破局关键,通过数据整合、AI诊断、价值量化,实现运维标准化、产品化。可探索年费套餐、增值服务分成、平台化扩张三大路径,构建可持续收入模式,打造核心竞争力。
559 2
光伏EPC增收新路径:智能运维系统解决方案全景解析
|
机器学习/深度学习 人工智能 自然语言处理
以史为鉴,未雨绸缪:身处“大模型掀起的AI浪潮中”的感悟和思考
本文旨在帮助读者更深入地理解大模型和AI技术,重点介绍关键技术革新的背景与影响,特别是本次大模型时代和新一轮AI浪潮的推动因素与发展历程。

热门文章

最新文章