首页 > 语言 > 关键词  > 正文

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

2007-03-23 14:47 · 稿源:CSDN

  显式表达式使开发者对包含本地资源的文件和资源键(resource key)的名称有更强的控制能力。在示例web.sitemap中,第一个元素使用了显式资源表达式。显式表达式在每个属性上指定。第一个元素的Title属性使用了显式表达式。显式表达式必须以$resource:开头。在这个标识符之后,开发者必须提供资源文件的根名称和资源键。开发者可以选择提供一个默认值。在例子中,表达式$resources: Title, MyTitle , Home表明提供程序应该查看以"Title"开头的资源文件。对于发送法语头信息的浏览器开说,提供程序会查找Title.fr.resx资源文件。接下来提供程序查看键为MyTitle的资源。如果提供程序无法找到这种资源,它会把字符串"Home"作为默认值。

  你可以运行示例来查看站点地图本地化的效果。把英语作为默认语言的浏览器会显式英语文本。如果使用IE,你可以通过点击"工具->Internet选项",并在"通用"选项卡点击"语言"按钮,点击"添加"按钮并选择添加"法语"。如果需要,还需要选中法语并点击"向上移动"按钮,使它成为IE的默认请求语言。把默认的语言改成法语之后,刷新示例页面。请注意,Menu、Treeview和SiteMapPath控件中的文本自动地显式为App_GlobalResources目录中存放的法语资源文件中的法语文本。

  Web.sitemap的内容

  以下是引用片段:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="https://schemas.microsoft.com/AspNet/SiteMap-File-1.0" enableLocalization="true">
<siteMapNode url="~/Default.aspx" title=" $resources: Title, MyTitle , Home" description="Default page description when no localized value exists." >
<siteMapNode url="~/Category.aspx" resourceKey="Category">
<siteMapNode title="Autos" description="Autos" url="~/Autos.aspx" resourceKey="Autos" />
<siteMapNode title="Games" description="Games" url="~/Games.aspx" resourceKey="Games" />
<siteMapNode title="Health" description="Health" url="~/Health.aspx" resourceKey="Health" />
<siteMapNode title="News" description="News" url="~/News.aspx" resourceKey="News" />
</siteMapNode>
</siteMapNode>
</siteMap>

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

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

  站点导航特性在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

举报

  • 相关推荐
  • 成都地铁官方回应“防走光”设计:后续会考虑普及其他站点

    ​近日,有网友在社交平台上分享了成都地铁的一项人性化设计细节:部分站点的步梯与扶梯之间安装了非透明的磨砂玻璃。这一发现迅速引发了公众的关注和讨论。记者实地走访后确认,成都地铁确实在部分站点采用了这样的磨砂玻璃设计。 针对这一设计,成都地铁官方给出了正式回应。官方表示,这一改变源于此前乘客的反馈意见。有乘客提出,在步梯上行走时,由于透�

  • AI 工具导航网站哪个好?超全 AI 工具导航网站推荐指南

    本文介绍了当前主流AI工具导航平台的特点和优势,帮助用户快速找到合适工具。重点推荐了5个平台:Futurepedia收录3000+工具,分类细致并提供实测指南;Insidr.ai含500+工具,适合专业用户查找;AI Parabellum对4500+工具进行深度测评;Product Hunt适合发现前沿新品;AIBase覆盖13000+工具,支持多维度筛选。特别推荐AIBase因其工具覆盖广、分类细、更新快、界面友好,并提供详细使用教程和API文档,是寻找AI工具的一站式解决方案。

  • 如何找到真正好用的AI工具?一个优质导航站是关键!

    文章探讨了AI工具爆炸式增长带来的信息过载问题,指出盲目试错会浪费大量时间。重点介绍了AIbase工具导航站的核心价值:1)精准分类直达需求场景;2)严格筛选确保工具质量;3)高频更新追踪前沿动态。该平台通过深度垂直分类、多维筛选机制和实时更新系统,帮助用户快速定位适合中文创作、图像生成等特定需求的AI工具,显著提升工作效率。文章强调在AI时代,专业导航平台能有效解决信息碎片化问题,是探索AI世界的效率入口。

  • 最全AI工具导航网站盘点:国内优质AI工具导航平台深度解析

    本文介绍了国内主流AI工具导航网站,帮助用户在海量AI工具中精准定位所需。随着AI技术发展,优质导航网站不仅能系统性分类各类工具,还能提供实时更新的评测和使用指南。重点推荐了5个平台:AIbase(收录超1万工具)、AI工具集(注重实用性评估)、优设AI导航(设计师专用)、AI导航网(创新性工具推荐)、AI工具网(智能搜索匹配)。建议用户根据工具收录量、分类体�

  • 2025比较好用的AI工具推荐:从文案到视频,AIbase AI工具导航站一站式搞定

    本文推荐多款高效AI工具:1.办公助手ChatGPT处理邮件报告等文本工作;Notion AI智能管理知识库。2.设计工具Midjourney通过文字生成创意图片;Canva提供零基础专业设计。3.写作助手Claude擅长长文分析与总结;Grammarly提升英文写作质量。4.视频工具HeyGen快速制作数字人视频;Runway ML实现高级视频编辑。建议使用AI导航平台精准匹配需求,避免信息过载,让AI真正成为效率倍增器而非创造力的替代品。

  • AI导航站哪个好?推荐AIbase,帮你高效找到最强AI工具!

    文章介绍了在AI工具泛滥的当下,用户面临选择困难的问题,推荐使用AIbase导航网站。该平台通过科学的评估体系精选优质AI工具,覆盖写作、绘图、编程等数十个垂直场景,并提供实时行业资讯。不同于简单罗列工具,AIbase兼具工具导航和内容平台功能,每日更新AI动态,帮助用户高效匹配需求。平台还开放工具入驻通道,为开发者提供曝光机会。AIbase以专业分类和人性化体验,成为用户进入AI世界的理性入口。

  • 在线 AI 工具大盘点:哪个生图更好用?超实用导航网站推荐

    文章介绍了当前在线AI工具在各领域的广泛应用,重点分析了写作、设计和教育三大领域的代表性工具。写作方面,ChatGPT和豆包能快速生成各类文本内容;设计领域,Adobe Firefly和Canva通过AI简化创作流程;教育工具如松鼠Ai提供个性化学习方案。文章还对比了Midjourney、Stable Diffusion和文心一格等生图工具的优劣,最后推荐AIbase导航网站帮助用户快速找到合适工具。这些AI工具显著

  • 苹果最强平板!全新iPad Pro将带来4大升级点

    苹果将于今年秋季推出新款iPad Pro,这是苹果最强大的平板电脑,新品将带来4大升级点,具体如下。 首发全新M5芯片 M5是这代iPad Pro最重大的升级点之一,目前关于M5芯片的升级细节尚不明确,这颗芯片采用台积电3nm工艺制程,其CPU、GPU和神经网络引擎将会迎来常规的升级迭代。 双前置摄像头 去年的iPad Pro M4将前置摄像头移至横向一侧,这次全新iPad Pro将在横向、纵向位置均

  • 小米SU7升级“截图导航”功能 iPhone用户太方便了

    小米SU8推出全新"截图导航"功能,针对苹果用户优化使用体验。该功能允许iPhone用户直接分享含地址信息的截图至小米汽车APP,系统将自动识别并规划导航路线。数据显示超50%的小米SU7车主为苹果用户,为此小米特别开发了这一便捷功能。此外,SU7还支持多种导航流转方式,包括高德地图同账号同步、微信地址分享等,实现手机与车机的无缝衔接。这一创新极大简化了导航设置流程,提升了出行效率。

  • AI日报:字节发布同声传译模型Seed LiveInterpret 2.0;秘塔搜索API上线;Lovart AI正式版全球发布

    AI日报栏目报道了多项AI领域最新进展:1)字节跳动发布端到端同声传译模型Seed LiveInterpret 2.0,实现中英高质量实时翻译;2)秘塔搜索API上线,提供低价多模态搜索服务;3)Lovart AI正式版发布,作为首个AI设计Agent重塑创作流程;4)李沐团队推出Higgs Audio v2语音合成模型,融合千万小时训练数据;5)OpenAI开发Sora2视频生成模型,与谷歌Veo3展开竞争;6)OpenAI与Oracle合作扩展Stargate项目,�