動態修改SiteMapPath路徑

http://www.purecs.net/Threads/t376.aspx
在網頁上放置一個SiteMapPath可以提供使用者一個清楚的瀏覽路標指示,如果你的SiteMap是靜態不會變動的倒是很簡單,只要編寫好一個XML檔放上去,其它的事就可以不用管了,但是在動態網頁中SiteMap的路徑可能會隨著不同的情況而有所更動,這時預先建立的靜態SiteMap似乎就不怎麼好用了,因為你無法事先去預測SiteMap該有哪些路徑(就像現在這個論壇上面的SiteMap),這個時後你必需要用程式動態控制SiteMapPath中Node的連結路徑及顯示的文字,現在只要跟著下面的步驟做就可以簡單的做到這個功能。

1. 先在Web Form中建立一個ModifyPath方法
看不清楚 | 列印 | 複製
1private SiteMapNode ModifyPath(Object sender, SiteMapResolveEventArgs e)  
private SiteMapNode ModifyPath(Object sender, SiteMapResolveEventArgs e)
2. 在Page_Load 中註冊SiteMapResolve事件給ModifyPath方法
看不清楚 | 列印 | 複製
1SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(this.ModifyPath);  
SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(this.ModifyPath);
3. 最後在ModifyPath中撰寫動態路徑及所顯示的文字程式碼即可
看不清楚 | 列印 | 複製
1private SiteMapNode ModifyPath(object sender, SiteMapResolveEventArgs e)  
2{  
3    SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true);  
4    SiteMapNode modifyNode = currentNode;  
5 
6    modifyNode.Url = "http://www.bbb.net";  
7    modifyNode.Title = "bbb";  
8 
9    if ( (modifyNode = modifyNode.ParentNode) != null)  
10    {  
11        modifyNode.Url = "http://www.aaa.net";  
12        modifyNode.Title = "aaa";  
13    }  
14 
15    return currentNode;  
16}  
private SiteMapNode ModifyPath(object sender, SiteMapResolveEventArgs e) { SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true); SiteMapNode modifyNode = currentNode; modifyNode.Url = "http://www.bbb.net"; modifyNode.Title = "bbb"; if ( (modifyNode = modifyNode.ParentNode) != null) { modifyNode.Url = "http://www.aaa.net"; modifyNode.Title = "aaa"; } return currentNode; }
好了,你現在應該可以看到一點點成果,至少SiteMapPath中的結點能被程式控制了,剩下的只需要寫出ModifyPath中真正的取得路徑的程式碼,動態修改SiteMapPath就是這麼簡單。

看不清楚 | 列印 | 複製
1protected void Page_Load(object sender, EventArgs e)  
2{  
3    SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(this.ModifyPath);  
4}  
5 
6private SiteMapNode ModifyPath(object sender, SiteMapResolveEventArgs e)  
7{  
8    SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true);  
9    SiteMapNode modifyNode = currentNode;  
10    modifyNode.Url = "http://www.bbb.net";  
11    modifyNode.Title = "bbb";  
12 
13    if ( (modifyNode = modifyNode.ParentNode) != null)  
14    {  
15        modifyNode.Url = "http://www.aaa.net";  
16        modifyNode.Title = "aaa";  
17    }  
18 
19    return currentNode;  
20}  
protected void Page_Load(object sender, EventArgs e) { SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(this.ModifyPath); } private SiteMapNode ModifyPath(object sender, SiteMapResolveEventArgs e) { SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true); SiteMapNode modifyNode = currentNode; modifyNode.Url = "http://www.bbb.net"; modifyNode.Title = "bbb"; if ( (modifyNode = modifyNode.ParentNode) != null) { modifyNode.Url = "http://www.aaa.net"; modifyNode.Title = "aaa"; } return currentNode; }

那如果是动态的无限级的网站应该怎么做呢,用递归上去做结点吗?可是结点数量不一样啊


Re: 動態修改SiteMapPath路徑

  • a
 0.0 (0 票)
SiteMapNode有一個ChildNodes集合屬性
包含Add、Insert、Remove、Clear等方法可以用來新增或是刪除結點
所以不管是多少層都可以在SiteMapResolve事件中依邏輯增加或減少層級
例如你在這個網站上回文時原本的結點應該是

pure C# 技術社群 >> ASP.NET >> 動態修改SiteMpaPath路徑 >> 回覆文章

但是在程式中已經把 "回覆文章" 這個節點刪除掉了

看不清楚 | 列印 | 複製
1//currentNode 為"回覆文章"  
2SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true);  
3 
4if (currentNode.Key.EndsWith("PostEditor.aspx".ToLower()))  
5{  
6    //currentNode 為"回覆文章"的上一層 "動態修改SiteMpaPath路徑"  
7    currentNode = currentNode.ParentNode;  
8    currentNode.ChildNodes.Clear();  
9}  
//currentNode 為"回覆文章" SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true); if (currentNode.Key.EndsWith("PostEditor.aspx".ToLower())) { //currentNode 為"回覆文章"的上一層 "動態修改SiteMpaPath路徑" currentNode = currentNode.ParentNode; currentNode.ChildNodes.Clear(); }

所以無論是用遞歸或是任何你想的到的方法都可以
只要能自由的新增、刪除、修改結點就沒什麼是做不到的

转载于:https://www.cnblogs.com/Nina-piaoye/archive/2006/10/24/537870.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++学习之路 | PTA乙级—— 1007 素数对猜想 (20分)(精简)

1007 素数对猜想 (20分) 让我们定义d ​n ​​ 为:d ​n ​​ p ​n1 ​​ −p ​n ​​ ,其中p ​i ​​ 是第i个素数。显然有d ​1 ​​ 1,且对于n>1有d ​n ​​ 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给…

python: SHA256算法的实现和消息的哈希散列值计算

目录1 SHA2562 实现原理2.1 消息预处理2.2 使用的常量和循环移位函数2.3 主循环3 结果4 对中文编码1 SHA256 SHA256是SHA-2下的一个子算法,与之类似的还有SHA224、SHA384、SHA512,算法原理基本一致。 哈希算法通过对消息进行计算,生成一定长…

财报上的云计算战场: 巨头们垄断加剧

来源: 第一财经一周之内,四大云业务巨头公司前后脚发布财报。亚马逊的云业务(AWS)依然跑在了最前面,以174亿美元排在首位。微软、谷歌、阿里巴巴也没有放慢步伐。阿里云去年累计的营收超过了百亿;微软的Azu…

Preserve Whole Object(保持对象完整)

从某个对象中取出若干值,将它们作为某一次函数调用的参数 int low daysTempRange().getLow(); int height daysTempRange().getHigh(); withinPlan plan.withinRange(low, high); 重构:改为传递整个对象 withinPlan plan.withinRange(daysTempRan…

简明Python教程学习笔记_5_解决问题

问题 我提出的问题是: 我想要一个可以为我的所有重要文件创建备份的程序。 尽管这是一个简单的问题,但是问题本身并没有给我们足够的信息来解决它。进一步的分析是必需的。例如,我们如何确定该备份哪些文件?备份保存在哪里&#…

【开始研究Community Server,转贴一点东西】Community Server资料收集

Community Server学习资料 uGoer 系列文章 Community Server专题一:概述Community ServerCommunity Server专题二:体系结构Community Server专题:附件(DOC&PPT)--2005年10月10日更新Community Server专题三:HttpModuleCommuni…

python实现RSA算法,对数据进行加密认证

RSA算法RSA一、数学原理二、实现代码1 生成素数2 生成秘钥3 对数据进行加密、解密总结RSA RSA是一种非对称加密体制,由公钥和私钥组成,数学原理是实数域的模余法。在使用私钥对数据进行加密后,可用公钥对数据进行解密。 在RSA算法中&#xf…

C++学习之路 | PTA乙级—— 1008 数组元素循环右移问题 (20分)(精简)

1008 数组元素循环右移问题 (20分) 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A ​0 ​​ A ​1 ​​ ⋯A …

他研究了5000家AI公司,说人工智能应用该这么做!

来源:公众号InfoQ编辑:陈思 Eva;视频剪辑:汪春良 概要:本文作者 Henry Shi是美国人工智能的博士,连续创业者,专注于 AI 领域的早期投资(AI List Capital管理合伙人)。无…

Replace Parameter with Methods(以函数取代参数)

对象调用某个函数,并将其结果传递给另一个函数 int basePrice quantity * itemPrice; double discountLevel getDiscountLevel(); double finalPrice discountPrice(basePrice, discountLevel); 重构:让参数接受者移除该项参数,并直接调…

简明Python教程学习笔记_6_面向对象编程

面向对象编程:https://www.liaoxuefeng.com/wiki/897692888725344/923030496738368面向对象高级编程:https://www.liaoxuefeng.com/wiki/897692888725344/9230305380126401、类、对象 类 和 对象 是面向对象编程的两个主要方面。 类 是创建一个 新类型&a…

C++学习之路 | PTA乙级—— 1009 说反话 (20分)(精简)

1009 说反话 (20分) 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字…

哈希值+非对称加密+网络+数字签名,你真的知道怎么给游戏充钱吗

前文 使用socket实现局域网不同主机通信 SHA256算法的实现和消息的哈希散列值计算 python实现RSA算法,对数据进行加密认证 文章目录数字签名与认证攻击类型算法选择实现流程总结数字签名与认证 什么是数字签名? 签名我们大家都知道,A在纸上签…

2017 年脑机接口研发热点回眸

来源:科技导报概要:脑机接口(brain-computer interface,BCI)通过解码人类思维活动过程中的脑神经活动信息,构建大脑与外部世界的直接信息传输通路,在神经假体、神经反馈训练、脑状态监测等领域有…

Visual Studio“Orcas”October 2006 CTP版下载

Visual Studio “Orcas” October 2006 CT版可以下载了,但这次Release的是一个虚拟机的镜像,所以需要在虚拟PC上运行,文件的大小是4150.5 MB,有点太大了。下载地址:http://www.microsoft.com/downloads/details.aspx?…

C++学习之路 | PTA乙级—— 1010 一元多项式求导 (25分)(精简)

1010 一元多项式求导 (25分) 设计函数求一元多项式的导数。(注:x ​n ​​ (n为整数)的一阶导数为nx ​n−1 ​​ 。) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数…

简明 Python 教程学习笔记_7_文件操作(os、shutil、pathlib )

参考 :http://www.cnblogs.com/nulige/archive/2016/12/06/6037752.html 在很多时候,你会想要让你的程序与用户(可能是你自己)交互。你会从用户那里得到输入,然后打印一些结果。我们可以分别使用 raw_input 和 print 语…

地牢房间迷宫走廊生成(二),Python实现洪水法、完美迷宫

文章目录前言1 随机房间和房门2 生成走廊2.1生成迷宫2.4 使用循环改进2.3 走廊缩减2.3 走廊再简化总结前言 前面通过随机房间、房门,对房门寻路生成走廊。由于使用A星算法,寻到的是最短路径,这样生成的走廊过直和简单。如果需要生成弯曲的走廊…

Introduce Parameter Object(引入参数对象)

某些参数总是很自然地同时出现 重构:以一个对象取代这些参数

深度解析,马斯克最新发射的先进火箭

来源:环球时报概要:就在几个小时前,美国人成功发射了目前全世界运载能力最强的超级火箭——“猎鹰重型”。就在几个小时前,美国人成功发射了目前全世界运载能力最强的超级火箭——“猎鹰重型”。虽然中芯级火箭在回收过程中坠毁&a…