当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 数据回发时,维护ASP.NET Tree控件位置

ASP.NET
asp.net 产生随机颜色实现代码
asp.ent(C#)中判断空字符串的3种方法以及性能分析
asp.net 基于forms验证的目录角色权限的实现
ASP.NET 统计图表控件小结
asp.net 动态引用样式表代码
asp.net 获取IP的相关资料
真正的获取客户端真实IP地址及利弊分析
asp.net(c#)文件下载实现代码
asp.net 不用GridView自带删除功能,删除一行数据
asp.net forms身份验证,避免重复造轮子
asp.net 站点URLRewrite使用小记
asp.net Gridview行绑定事件新体会
asp.net MVC实现简单的上传功能
asp.net web.config加密解密方法
aspx实现的 jquery ui 的 flexgrid demo
ASP.NET Internet安全Forms身份验证方法
asp.net使用for循环实现Datalist的分列显示功能
jQuery AJax调用asp.net webservers的实现代码
ASP.NET 页面刷新和定时跳转代码整理
asp.net GridView控件鼠标移动某行改变背景颜色(方法一)

数据回发时,维护ASP.NET Tree控件位置


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 82 ::
收藏到网摘: n/a

  ASP.NET2.0提供了一个功能强大的TreeView控件,但是它看起来有一个缺陷:它好像不能够跟踪用户最后选择的一个节点。如果你滚动到第50个节点然后展开该节点,那么当单击链接页面进行回发后,你必须重新利用滚动条下拉到你想要的节点位置。

  在.NET较早的版本里,您可能考虑使用SmartNavigation这个特性.SmartNavigation是Web页面指令的一个属性,它的取值为布尔值,一个设置为true的页面指令看起来类似如下:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" SmartNavigation="true" %>

  不过,正如好多人已经注意到的,SmartNavigation本身就有洗衣阿问题,事实上微软也被这个问题所困扰以至于在ASP.NET2.0里添加了MaintainScrollbackPositionOnPostback属性而取代SmartNavigation 。遗憾的是,我在使用它们时,感觉它们都有一些问题,我稍后将进行解释。

  本文我将介绍SmartNavigation和MaintainScrollbackPositionOnPostback 在维护页面回发位置方面的缺点,并提供如何利用Javascript来解决这个问题,这个小技巧即使对复杂的Web页面也同样有效.

  再见了SmartNavigationeb,欢迎MaintainScrollbackPositionOnPostback

  SmartNavigation主要作用是减少页面导航时的闪动,它主要利用适当的IFrames来进行这个工作并仅仅显示改变的部分。SmartNavigation 同样被设计为能够维护页面位置,元素焦点,回发浏览器访问历史记录的作用。遗憾的是,即使微软知道SmartNavigation已经去掉,但是检查MSDN文档,您仍然能够看到SmartNavigation其实仅仅被定义为"过时"的 。利用GOOGLE的搜索您可以搜到大家对SmartNavigation的讨论.

  下一步

  ASP.NET2.0引进了MaintainScrollbackPositionOnPostback,和SmartNavigation类似,您可以在Page属性里设置它的值为true或者为false。

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" MaintainScrollPositionOnPostback="true" %>

  非常简明,这个属性/属性值对是用来维护页面位置的。遗憾的是,它只是维护页面的位置,因为如果你在用户控件里使用了TreeView控件,然后在页面里使用该用户控件,那么页面在在回发后您将返回到用户控件的位置而不是TreeView节点位置。

  简单的说,MaintainScrollbackPositionOnPostback只是用来维护页面的回发位置。如果你的页面固定--也就是一个应用程序那样不需要进行利用滚动条进行上下滚动,那么这个属性对你可能无用。如果你的页面很常需要滚动,那么你就需要利用该属性.

  在TreeView里维护控件的位置

  最近,我在开发一个Web应用程序Windowsy,也就是每一个页面都会全屏显示而不是滚动。页面里使用类TreeView来进行导航想列表一样进行显示,但是页面本身不需要上下滚动。但是问题是这里的数据列可能需要扩展使得页面出现滚动.我准备使用如下的方式解决这个问题.
首先,利用TreeView控件的SelectedNode属性,可以知道哪个节点被选取,这个被选取的节点需要保存起来,它最终会程序为HTML元素。如果我知道了被选择HTML控件的ID,那么我就可以滚动到该控件并设置该控件为当前焦点。确实,如果您看以下使用TreeView控件的页面HTML代码,你将发现生成的一个隐藏<input>元素,以及为textbox类型,它的ID可能类似TreeViewx_SelectedNode

<input type="hidden" name="TreeView1_SelectedNode" id="TreeView1_SelectedNode" value="TreeView1t54" />


  有了这些知识,你就知道该怎么做了,基本方法是隐藏的Input是一个textbox,我们要做的就是知道将来呈献的内容。一个TreeView最终呈现为HTML表格,节点的值被用来作为单元格的值,<TD>元素呈现节点名称,所以通过查找单元格ID并滚动到那里.

[1] [2] [3] 下一页