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。新实现方式,唯一的一个小问题是如果页面篇幅太长或载入速度太慢,会有一个页面跳跃的扰动,当然这点小缺陷和正确、稳定、轻便比起来就不是什么大问题了。



目录
打赏
0
0
0
0
20
分享
相关文章
VideoMind:Chain-of-LoRA突破时间盲区让AI真正看懂长视频
VideoMind是一种新型视频语言代理,专为解决长视频时间定位理解挑战设计。它通过“Chain-of-LoRA”技术结合四个专业角色(Planner、Grounder、Verifier、Answerer)实现高效推理。Planner分析查询并制定计划;Grounder精确定位视频时刻;Verifier验证候选时刻准确性;Answerer生成最终答案。此架构在14个公共基准上表现出色,尤其在长视频定位任务中超越了现有模型,同时保持高内存效率。VideoMind推动了多模态AI的发展,提供了解决复杂视频理解问题的新方法。
9986 4
os-copilot安装_配置_功能测试全集
我是一位中级运维工程师,我平时工作会涉及到 各类服务器的 数据库 与 java环境配置 操作。 我顺利使用了OS Copilot的 -t -f | 功能,我的疑惑是不能在自动操作过程中直接给与脚本运行权限,必须需要自己运行一下 chmod 这个既然有了最高的权限,为什么就不能直接给与运行权限呢。 我认为 -t 功能有用,能解决后台运行基础命令操作。 我认为 -f 功能有用,可以通过task文件中撰写连续任务操作。 我认为 | 对文件理解上有很直接的解读,可以在理解新程序上有很大帮助。
229 86
3D-MIMO信道模型的MATLAB模拟与仿真
该研究利用MATLAB 2022a进行了3D-MIMO技术的仿真,结果显示了不同场景下的LOS概率曲线。3D-MIMO作为5G关键技术之一,通过三维天线阵列增强了系统容量和覆盖范围。其信道模型涵盖UMa、UMi、RMa等场景,并分析了LOS/NLOS传播条件下的路径损耗、多径效应及空间相关性。仿真代码展示了三种典型场景下的LOS概率分布。
356 1
实时数仓 Hologres产品使用合集之业级问答知识库该如何部署有教程吗
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
177 0
未来人工智能在后端开发中的应用前景
随着人工智能技术的不断发展,后端开发领域也迎来了新的机遇与挑战。本文探讨了人工智能在后端开发中的应用前景,分析了其对传统开发模式的影响和未来发展趋势。
实时计算 Flink版操作报错之抽取Oracle11g时,报错: "Retrieve schema history failed, the schema records for engine ... has been removed",怎么处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
Microsoft Windows远程桌面服务远程执行代码漏洞(CVE-2019-0708)
Microsoft Windows远程桌面服务远程执行代码漏洞(CVE-2019-0708)
348 2
性能工具之 Java 调试工具 JDB
【2月更文挑战第25天】性能工具之 Java 调试工具 JDB
188 4
Spring 核心类 ConfigurationClassPostProcessor 流程讲解及源码全面分析(一)
Spring 核心类 ConfigurationClassPostProcessor 流程讲解及源码全面分析
286 0
AI助理
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问

你好,我是AI助理

可以解答问题、推荐解决方案等