min10

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

网站中如果存在很多个页面文件(aspx页),我会把文件放在不同的文件夹中,具体要根据什么把文件放到不同的文件夹中,我也不知道,呵呵。我自己通常是这样分的:一是将共同完成某一个功能的页面文件放在同一个文件夹;二是根据用户的访问限制(不同角色的用户能访问的文件不一样)。

这几天闲着没事做,所以就参考园子里前辈的思路,模仿着写了两个网站导航的例子,以后做其它项目的时候如果要用到网站导航控件的东西,就相对熟悉一些了。

一:ASP.NET站点导航示例1

这里直接利用web.sitemap,将文件的链接写在sitemap中,同时配置好不同页面的角色访问限制(利用siteMapNode的roles属性),web.config中也进行了以下限制:

Code

之所以在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 的相应 DataRowDataTable.RowsDataRowCollection 中的索引来对 DataView 中的 DataRowView 对象进行排序。

LINQ to DataSet 允许开发人员使用 LINQ 来创建对 DataSet 的复杂且功能强大的查询。LINQ to DataSet 查询返回 DataRow 对象的枚举,但在绑定方案中不易使用。DataView 可以从 LINQ to DataSet 查询创建,并具有该查询的筛选和排序特征。通过提供基于 LINQ 表达式的筛选和排序(可执行比基于字符串的筛选和排序更复杂、功能更强大的筛选和排序操作),LINQ to DataSet 可扩展 DataView 的功能。有关更多信息,请参见数据绑定和 LINQ to DataSet
posted on 2008-11-19 16:34  min10  阅读(564)  评论(0)    收藏  举报