网站中如果存在很多个页面文件(aspx页),我会把文件放在不同的文件夹中,具体要根据什么把文件放到不同的文件夹中,我也不知道,呵呵。我自己通常是这样分的:一是将共同完成某一个功能的页面文件放在同一个文件夹;二是根据用户的访问限制(不同角色的用户能访问的文件不一样)。
这几天闲着没事做,所以就参考园子里前辈的思路,模仿着写了两个网站导航的例子,以后做其它项目的时候如果要用到网站导航控件的东西,就相对熟悉一些了。
一:ASP.NET站点导航示例1
这里直接利用web.sitemap,将文件的链接写在sitemap中,同时配置好不同页面的角色访问限制(利用siteMapNode的roles属性),web.config中也进行了以下限制:
之所以在web.config中也进行限制,是为了限制不具有“0,2” 这种角色的用户访问Parent1这个文件夹中的任何文件。这跟在导航控件(TreeView\Menu)显示Parent1文件夹中的文件完全是两回事,不具有“0,2”角色的用户能看到Parent1文件夹中的文件的链接(这是因为在sitemap中的siteMapNode节点的roles属性中指定了角色,我根据这个角色将这个文件链接节点添加到导航控件中),但是却无法访问这个文件,“看到摸不到”,嘿嘿。
优点:
1、可以使用所有的导航控件 不需要写任何代码
2、站点地图可以很方便的使用本地化资源(多种语言)
3、与RoleProvider结合,可以很方便的进行用户的角色限制管理
4、不需要写自定义的站点地图提供程序 使用默认的System.Web.XmlSiteMapProvider即可
缺点:
因为导航控件放在母版页中,如果文件太多,每次都要加载母版页,所以也必须重新加载站点地图,会耗费资源?
不过这个例子中我没有用到Menu控件,示例2中我写了Menu。
源代码:DemoSolution1.rar
二:ASP.NET站点导航示例2
这里我没有利用web.sitemap,而是直接根据前辈的思路,直接把文件链接存在数据库中,数据库结构如下:
TreeView表中的这些字段一般应该够用了,呵呵,我也想不出来再加什么字段了,应该够用了吧。
优点:
1、因为文件链接数据都存在数据库 不需要提供站点地图
2、不需要写自定义的站点地图提供程序 配置文件中也不需要生命siteMap节点(System.Web.XmlSiteMapProvider)
3、TreeView或Menu中的节点都是自己代码实现,与RoleProvider结合,可以很方便的进行用户的角色限制管理
缺点:
1、SiteMapPath控件不能直接使用
2、因为导航控件放在母版页中,如果文件太多,每次都要加载母版页,从数据库中取节点数据,比较浪费资源。可以考虑
使用数据缓存,或者做成一个控件,然后使用控件缓存(页缓存);
3、由于数据放在数据表中,需要专门的维护,也比较麻烦。
4、站点地图文件存在数据库中,不知道该怎么使用本地化资源(多种语言)
源代码:DemoSolution2.rar
三:ASP.NET站点导航示例3
这个其实是微软MSDN上的一个例子,使用平面文件(txt文件)作为站点地图。然后写了自己的站点地图提供程序,继承
自SiteMapProvider,不过这个例子中没有提供角色管理的东西,我也还在继续研究。
优点:
1、可以使用所有的导航控件 不需要写任何代码
缺点:
1、站点地图为txt文件,不知道改怎么使用本地化资源(多种语言)
2、如何与RoleProvider结合,进行用户的角色限制管理?
3、由于使用自定义的站点地图提供程序 需要在配置文件中声明siteMap节点(type="DemoSolution.SimpleTextSiteMapProvider")
4、我在测试时,发现每当在txt文件中添加一个节点,就需要修改配置文件中的siteMap节点的siteMapFile属性(如原来siteMapFile = "SimpleTextSiteMapProvider/SiteMap.txt",则要先重命名一下SiteMap.txt,比如改为SiteMap1.txt,然后浏览页面时就会找不到文件,之后把名字再改回来就好了,为什么呢)
源代码:DemoSolution3.rar
三:ASP.NET站点导航示例4
这个也是微软MSDN上的一个例子,跟示例2一样将文件链接存在了数据库中,我改写了MSDN的例子,把数据存在了SQL
SERVER2005中了。然后写了自己的站点地图提供程序,继承自StaticSiteMapProvider,同样这个例子中也没有提
供角色管理的东西。
数据库结构:
优点:
1、可以使用所有的导航控件 不需要写任何代码
缺点:
1、站点地图文件存在数据库中,不知道该怎么使用本地化资源(多种语言)
2、如何与RoleProvider结合,进行用户的角色限制管理?
3、由于使用自定义的站点地图提供程序 需要在配置文件中声明siteMap节点(type="DemoSolution.SqlSiteMapProvider")
4、我在测试时同样也发现,每当在数据库中添加一个节点,就需要修改配置文件中的siteMap节点的type属性,比如原来
type="DemoSolution.SqlSiteMapProvider",我把它改为type="DemoSolution.SqlSiteMapProvider1",然后再
查看页面就会报错,再把名字改回来就好了,为什么???
5、我发现TreeView控件只能显示一个根节点,不知道是哪出错了????
源代码:DemoSolution4.rar
MSDN:
DataView 类
表示用于排序、筛选、搜索、编辑和导航的 DataTable 的可绑定数据的自定义视图。
DataView 的一个主要功能是允许在 Windows 窗体和 Web 窗体上进行数据绑定。
另外,可自定义 DataView 来表示 DataTable 中数据的子集。此功能让您拥有绑定到同一 DataTable、但显示不同数据版本的两个控件。例如,一个控件可能绑定到显示表中所有行的 DataView,而另一个控件可能配置为只显示已从 DataTable 删除的行。DataTable 也具有 DefaultView 属性。它返回表的默认 DataView。例如,如果希望在表上创建自定义视图,请在 DefaultView 返回的 DataView 上设置 RowFilter。
若要创建数据的筛选和排序视图,请设置 RowFilter 和 Sort 属性。然后,使用 Item 属性返回单个 DataRowView。
还可使用 AddNew 和 Delete 方法从行的集合中进行添加和删除。在使用这些方法时,可设置 RowStateFilter 属性以便指定只有已被删除的行或新行才可由 DataView 显示。
注意:
如果不显式指定 DataView 的排序条件,将按 DataView 的相应 DataRow 在 DataTable.RowsDataRowCollection 中的索引来对 DataView 中的 DataRowView 对象进行排序。

浙公网安备 33010602011771号