用户名: 密码: 免费注册 忘记密码? 网站地图 | 加入收藏 | 设为首页
首页 | 新闻 | 工具 | 系统 | 办公 | 聊天 | 多媒体 | 网页 | 运营 | 平面 | 欣赏 | 数据库 | 程序 | 服务器 | 组网
网页 | 3dmax | Ghost | Windows Xp| Dreamweaver | photoshop | Flash | office | Alexa | Css | QQ | Asp | PHP | Jsp | Access
Flash MX 2004入门 | 网站推广策略 | CorelDRAW入门 | ASP学习 | 网站建设大师功 | Word入门
  iTbulo.com > 学院 > 程序开发教程 > ASP.net教程 > Asp.Net实例教程 > 文章正文
在ASP.NET 2.0中建立站点导航层次
iTbulo.COM 2007-3-19 hwencai()

  运行示例的时候,你开始位于站点的主页。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中。元素中嵌套的每个元素为重映射进入站点的 (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>

上一页  [1] [2] [3] [4] [5] [6] [7] 

文章搜索
相关资讯
相关文章 相关下载
在ASP.NET中上传图片并生成缩略图
Excel在.Net下驻留内存的解决方法
ASP.NET中常用的优化性能方法详解
网友原创:从N层到.NET详细剖析原理
经验之谈:MySQL与ASP.NET配合更强大
焦点信息