歡迎光臨 pure C# 技術社群. 登入註冊

pure C# 技術社群

- Microsoft .NET Framework 相關技術非官方討論社群 -

動態修改SiteMapPath路徑

  • 1
  • 2
  • [第1/2頁 共16項]
#1

動態修改SiteMapPath路徑

  • a
 0.0 (0 人評價)

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

1. 先在Web Form中建立一個ModifyPath方法

2. 在Page_Load 中註冊SiteMapResolve事件給ModifyPath方法
3. 最後在ModifyPath中撰寫動態路徑及所顯示的文字程式碼即可
好了,你現在應該可以看到一點點成果,至少SiteMapPath中的結點能被程式控制了,剩下的只需要寫出ModifyPath中真正的取得路徑的程式碼,動態修改SiteMapPath就是這麼簡單。


  • 回覆
  • |
  • 引用
  • |
  • 編輯
  • |
  • 私人訊息


贊助商連結

#2

Re: 動態修改SiteMapPath路徑

  • a
 0.0 (0 人評價)

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


  • 回覆
  • |
  • 引用
  • |
  • 編輯
  • |
  • 私人訊息

#3

Re: 動態修改SiteMapPath路徑

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

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

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



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

  • 回覆
  • |
  • 引用
  • |
  • 編輯
  • |
  • 私人訊息

#4

Re: 動態修改SiteMapPath路徑

  • a
 0.0 (0 人評價)

请问楼主,SiteMap是静态的,如果在一个页面对他进行了修改,会对其他页产生影响,这个问题如果解决?


  • 回覆
  • |
  • 引用
  • |
  • 編輯
  • |
  • 私人訊息

#5

Re: 動態修改SiteMapPath路徑

  • a
 0.0 (0 人評價)
如果是靜態的就不應該被修改
需要隨不同狀況臨時改變的就不該單純使用靜態SiteMap

  • 回覆
  • |
  • 引用
  • |
  • 編輯
  • |
  • 私人訊息

#6

Re: 動態修改SiteMapPath路徑

  • a
 0.0 (0 人評價)
引用 的文章:
如果是靜態的就不應該被修改
需要隨不同狀況臨時改變的就不該單純使用靜態SiteMap


感谢您的回复,我已经了解了什么时候使用这个方法。
还有一个问题需要请教您,就是如何随不同的情况修改这个控件的当前节点。
比如当前页面显示:  主页>用户>所有用户
我在当前页搜索一个用户名,我想让导航显示如下的效果:
主页>用户>用户名为"关键字"的用户
这个关键字是变化的,我通过什么方式可以在页面的后台cs文件中修改这个?

  • 回覆
  • |
  • 引用
  • |
  • 編輯
  • |
  • 私人訊息

#7

Re: 動態修改SiteMapPath路徑

  • a
 0.0 (0 人評價)
本討論主題第一篇正是在說明動態修改的方法,我所舉的例子是論壇的路徑會隨著使用者點選的討論區及主題不同而動態的變化名稱及連結

論壇首頁 >> 討論區 >> 主題

其中黃色標示部份就相當於你的例子中用戶會動態改變,還有另一個主題也有一些相關的討論也許你能參考看看。

  • 回覆
  • |
  • 引用
  • |
  • 編輯
  • |
  • 私人訊息


贊助商連結

#8

Re: 動態修改SiteMapPath路徑

  • a
 0.0 (0 人評價)

感谢楼主的回复,你说的这两个贴子我都已经看过了,而且也在网上搜索了一些相关的介绍,并进行了测试。
不过,楼主没有明白我说的意思,可能是我表述的不太清楚,我举个例子吧。

网站下有个news目录存放新闻,里面有两个文件CompanyNews.aspx,TechNews.aspx,一个是公司新闻,一个是科技新闻。
Web.sitemap站点中进行了定义:


正常没有加入动态修改代码时,访问情况是这样的:
CompanyNews.aspx   主页 > 新闻 > 公司新闻
TechNews.aspx        主页 > 新闻 > 科技新闻

我在CompanyNews.aspx.cs中加入动态修改处理:


这时访问CompanyNews.aspx页面,如下:主页 > 新闻 > 修改过的公司新闻 (是我想要的)
但是再访问TechNews.aspx 页面,也是这样:主页 > 新闻 > 修改过的公司新闻 (不是我想要的

就是说这个SiteMap,可能是因为全局静态的对象,只要在他的事件上面注册了一个修改方法,就会对整个网站的导航产生影响。

codeproject中的一篇文章也提到了这个问题
http://www.codeproject.com/aspnet/ABetterSiteMapResolve.asp
他采用的方式是在页面继承的PageBase.cs类中进行处理:

就是在OnInit中注册,在OnUnload取消注册,虽然这种方法不错,但总是对全局的导航进行操作,如果在并发访问大的情况下,或者出现异常没有取消注册,不知会不会有问题?

另外,我想知道有没有什么办法,在页面后台cs文件中的修改只对当前页有效,就是说有没有只控制当前页面内控件的方法来改变显示的内容,比如只针对页面中的这个:<asp:SiteMapPath ID="Sitemappath1" runat="server"></asp:SiteMapPath>

希望楼主有时间的时候能给予解答,谢谢!


  • 回覆
  • |
  • 引用
  • |
  • 編輯
  • |
  • 私人訊息
  • 1
  • 2
  • [第1/2頁 共16項]