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

ASP.NET
关于如何操作其他窗体的控件或变量的方法
一个简单的.net remoting客户端例子
System.Runtime.Remoting.Activation.ActivationServices.CreateInstance()
单点登录—演示:passport.winspace.net
WebSerivce研究笔记
[新]可精确到1毫秒的用以在记录文件中写入自定义的调试信息(主要是时间)的组件
vs.net 2005中文版下载地址收藏
VS2005Beta2安装几点经验和体会
一个Web文件上传的C#源代码
C#重点知识详解(一)
利用C#线程机制实现应用程序的单实例运行
C#重点知识详解(二)
c#重点知识详解(三)
c#重点知识详解(四)
c#重点知识解答(五)
c#重点知识详解(六)
通过命令行方式使用NUnit进行UT
程序控制开始菜单的弹出 C#
XSL、XML教程-DVBBS皮肤制作 最基本的语法
MapX从数据库读取数据形成新图层(C#)

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 79 ::
收藏到网摘: 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] 下一页