在ASP.NET 2.0中建立站点导航层次

修改提供程序(Provider)返回的站点导航数据

  存储在web.sitemap中、供XmlSiteMapProvider使用的导航数据是静态的--这些数据被载入内存中并作为只读数据存储。但是,很多站点的导航结构是根据查询字符串的值来参数化的。例如,新闻组(newsgroup)站点可能拥有良好定义的页面结构(例如,主页、新闻类别页面和新闻内容页面),但是实际的内容可能会有很大的不同,这依赖于查询字符串中的标识符。尽管把每种可能的查询字符串值都存储在<siteMapNode>元素中也是可能的,但是即使是中等数量的查询字符串值,也要求sitemap文件包含数百个<siteMapNode>元素。

  站点导航特性在SiteMapProvider基类中暴露了SiteMapResolve事件。可以使用SiteMap.SiteMapResolve或直接使用提供程序SiteMap.Provider.SiteMapResolve来执行这个事件。这个事件的返回值是一个SiteMapNode实例。你可以在自己的事件处理程序中编写自定义逻辑来建立SiteMapNode实例的层次结构。这个逻辑可以修改每个SiteMapNode的属性,因此URL和Title等属性会反映查询字符串带有的数据信息。

  下面的例子在global.asax中注册了一个事件处理程序。这个事件处理程序的代码是App_Code目录中的一个类。这个自定义的类复制与当前页面对应的SiteMapNode实例。XmlSiteMapProvider返回的节点都是只读的,而调用SiteMapNode上的Clone方法返回的是可写入的节点。在实例中,如果给Clone传递了true值,将导致当前的SiteMapNode和它的所有父节点都是可写入的。这个类的代码的其它部分检查当前的页面和当前页面的查询字符串,确定当前页面位于站点层次结构的什么位置。代码修改了URL和Title属性,包含一些额外的信息,这样SiteMapPath控件显示的导航UI就反映了网站用户为到达当前页面的实际点击路径。



  运行示例的时候,你开始位于站点的主页。SiteMapPath控件也反映了这一点。点击任何链接都会带你进入分类页面,它显示相关新闻类别中的新闻链接。请注意,如果你把鼠标停留在SiteMapPath控件的最后一个链接上,浏览器状态栏中显示的URL包含了查询字符串信息(它指定了新闻类别)。点击任何一个发布链接都会把你带回到新闻发布页面。如果你把鼠标停留SiteMapPath控件的链接上,可以注意到控件中的最后两个链接带有的URL和Title包含了点击路径的正确查询字符串和描述信息。如果你导航到站点的主页,并点击其它的新闻组和内容链接,SiteMapPath控件会被更新并反映第二次点击的链接。

Public Class PathExpansionHandler
Public Shared Function ExpandPath(ByVal sender As Object, ByVal e As SiteMapResolveEventArgs) As SiteMapNode
"获取当前和之前节点的引用
Dim nodeCopy As SiteMapNode = SiteMap.CurrentNode.Clone(True)
Dim tempNode As SiteMapNode = nodeCopy

"Check if there is a newsgroup type in the query string 数据挖掘交友
Dim typeID As String = Nothing
Dim typeIDUrlEncoded As String = Nothing
If Not String.IsNullOrEmpty(e.Context.Request.QueryString("type")) Then
typeID = e.Context.Server.HtmlEncode(e.Context.Request.QueryString("type"))
typeIDUrlEncoded = e.Context.Server.UrlEncode(e.Context.Request.QueryString("type"))
End If

"首先执行发布页面URL的固定
"如果查询字符串中包含发布ID,我们就知道当前节点式发布页面
If Not String.IsNullOrEmpty(e.Context.Request.QueryString("postingID")) Then
Dim postingID as string = _
e.Context.Server.HtmlEncode(e.Context.Request.QueryString("postingID"))
Dim postingIDUrlEncoded as string = _
e.Context.Server.UrlEncode(e.Context.Request.QueryString("postingID"))
Dim NewUrl As String = tempNode.Url + "?type=" + typeIDUrlEncoded + "&postingID=" + postingIDUrlEncoded
Dim NewTitle As String = tempNode.Title + ": " + postingID 数据挖掘研究院
tempNode.Url = NewUrl
tempNode.Title = NewTitle

tempNode = tempNode.ParentNode
End If

"然后,对新闻组页面进行固定
"这时候nodeCopy 变量知贤了新闻组节点
If Not String.IsNullOrEmpty(e.Context.Request.QueryString("type")) Then
Dim NewUrl As String = tempNode.Url + "?type=" + typeIDUrlEncoded
Dim NewTitle As String = tempNode.Title + ": " + typeID
tempNode.Url = NewUrl
tempNode.Title = NewTitle
End If

"最后返回当前节点
Return nodeCopy
End Function
End Class

  URL映射

  URL映射特性利用web.config中存储的配置信息把收到的请求重映射(remap)到不同的URL。重映射发生在对请求的所有其它处理操作之前。下面的例子演示的是重映射一个页面请求,实际上任意文件类型都可以把请求重映射到不同的URL。

  定义重映射URL

  URL映射的配置信息存储在web.config中。<urlMappings >元素中嵌套的每个<add>元素为重映射进入站点的(inbound)url定义了一条规则。url属性定义了进入站点的url的exact(原样)属性,URL映射特性会试图用它进行匹配操作。如果exact匹配操作发生了,就会给进入站点的URL重新写入mappedUrl属性值。请注意,这个特性不支持更高级的规则(例如基于通配符和正则表达式的匹配)。

  示例web.config为大量的url定义了映射规则。示例使用的web.sitemap文件定义的大量带有URL值的节点都会被重映射。其结果是,URL映射和站点导航的组合使用,使得开发者可以用友好的url来定义导航结构,并使用URL映射把请求重新写到不同的页面来执行实际的处理过程。

  当你运行示例的时候,请注意Menu和Treeview控件是如何根据web.sitemap文件中定义的站点结构来显示导航数据的。如果你把鼠标停留在Treeview控件或右上角的SiteMapPath控件的链接上方,状态栏中显示的url是一个友好的url链接。当你点击任何导航链接的时候,实际运行的页面是Default.aspx。但是,Menu、Treeview和SiteMapPath控件中的导航信息仍然反映为友好的URL结构。

  在页面的底部你还可以看到Request.Path、Request.QueryString["category"]和Request.RawUrl返回的值。Request.Path和Request.QueryString["category"]返回的值一直反映重映射进入站点的url的结果。但是,Request.RawUrl的值反映了重映射之前的友好的url。当站点导航特性试图把url信息与sitemap文件包含的数据进行匹配的时候,它会使用Request.RawUrl。如果匹配的值没有找到,XmlSiteMapProvider就把Request.Path作为替代者。在例子中,所有的友好url在web.sitemap文件中都有条目,因此使用站点导航的控件一直根据友好的url来显示和引用节点。

数据挖掘实验室



<?xml version="1.0" ?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.web>
<urlMappings enabled="true">
<add url="~/Category.aspx" mappedUrl="~/Default.aspx?category=default" />
<add url="~/Autos.aspx" mappedUrl="~/Default.aspx?category=autos" />
<add url="~/Games.aspx" mappedUrl="~/Default.aspx?category=games" />
<add url="~/Health.aspx" mappedUrl="~/Default.aspx?category=health" />
<add url="~/News.aspx" mappedUrl="~/Default.aspx?category=news" />
</urlMappings>
</system.web>
</configuration>
数据挖掘实验室

[数据挖掘专家] [数据挖掘研究院] [数据挖掘论坛] [数据挖掘实验室]
上一篇:在ASP.NET 2.0中建立站点导航层次
下一篇:在ASP.NET 2.0中建立站点导航层次
最新评论共有 0 位网友发表了评论 , 查看所有评论
发表评论( 不能超过250字,需审核,请自觉遵守互联网相关政策法规。 )
匿名?
数据挖掘网站导航 数据挖掘论坛导航
  • 数据挖掘工具
  • 数据挖掘论坛
  • DataCruncher - Cognos
  • MineSet - MathSoft
  • Intelligent Miner - GainSmarts
  • Sqlserver - SAS - Clementine
  • CART - Weka - WizSoft
  • NeuroShell - ModelQuest
  • data mining tools - Darwin
  • 数据挖掘交友
  • 数据挖掘博客
  • 数据挖掘工具
  • 数据挖掘资源
  • 数据挖掘技术算法
  • 数据挖掘相关期刊、会议
  • 研究院联盟合作专区
  • 数据挖掘基础与相关技术
  • 数据挖掘厂商与就业
  • 数据挖掘研究者乐园
  • 知名厂商数据挖掘工具资料
  • 国内数据挖掘实验室
  • Foreign Data Mining Lab
  • 热点关注
  • RSS 文档中 language 标签中的可选值
  • .net发送邮件的一些技巧
  • Asp.net 2.0 Treeview 无限级无刷新示例
  • ASP.NET 2.0 AJAX中Webservice调用方法示例
  • 在ASP.NET 2.0中建立站点导航层次
  • .net2.0邮件发送代码
  • 在ASP.NET 2.0中使用样式、主题和皮肤
  • ASP.NET中为GridView添加删除确认提示框
  • Net2005中的MD5加密
  • 在ASP.NET 2.0中使用样式、主题和皮肤
  • 论坛最新话题
  • Foundations of Statistical Natural Langu
  • Game Theory meet Data Mining: A Recent P
  • System Building: How does it help or hin
  • 数据挖掘与Clementine培训
  • 新手报到
  • 求 SASEM 客户流失预测分析
  • 数据挖掘工程师/搜索研究院—北京——无线
  • 数据挖掘入门介绍(如何着手数据挖掘)
  • Information Overload Survey Results
  • The INEX 2005 Workshop on Element Retrie
  • 相关资讯
    数据挖掘实验室资料
  • 数据挖掘博客地址
  • 数据挖掘实验室网站地址
  • Prepare for Medicare audits by using dat
  • 注册成为SAS用户与爱好者俱乐部会员
  • 水南梅
  • 明日烟
  • 新人报道
  • 下载
  • 厦门服务器托管,450元/月—0592-5177319 高
  • 买空间送域名--0592-5177319 高静