知识大全 使用asp.net2.0中的SiteMap中的一些问题

Posted 函数

篇首语:学而不思则罔,思而不学则殆。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使用asp.net2.0中的SiteMap中的一些问题相关的知识,希望对你有一定的参考价值。

使用asp.net2.0中的SiteMap中的一些问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  SiteMap 网站地图 在网站建设的时候是很有用的 它可以直接绑定在Men和TreeView控件上 还有一个指示当前路径的SiteMapPath控件 也可以直接绑定

  这是他常用的xml定义 <siteMapNode url= Course/Group/GroupList aspx title= GroupAdmin >这个SiteMap的权限已经和Membership结合起来了 不同权限的用户所看到的地图已经被控制了 可以配置role属性来扩展例外的访问许可 注意 是例外的访问许可

  <siteMapNode url= Course/Tests/TestList aspx title= TestAdmin role= student >这里有些介绍

  简单的使用这里不作赘述 只是讨论一下怎么和扩展一下 让他可以访问资源时附带参数

  首先介绍这样一个资源 MySiteMapTool 这位仁兄已经提供了一个工具 可以在程序中转发带参数的请求比如 MySiteMap Forward( Details AlbumID= &Page= ) 确是简单实用

  现在想要的功能是 因为各个液面都需要不同的参数 所以在没有这些参数的情况下就禁止用户访问那个页面 转而访问父一级页面 递归

  首先 SiteMap本身有个SiteMapResolve事件 在当前路径被解析时触发 这是一段来自MSDN的代码

  private void Page_Load(object sender EventArgs e)

   // The ExpandForumPaths method is called to handle // the SiteMapResolve event SiteMap SiteMapResolve += new SiteMapResolveEventHandler(this ExpandForumPaths)

  private SiteMapNode ExpandForumPaths(Object sender SiteMapResolveEventArgs e)

   // The current node represents a Post page in a bulletin board forum // Clone the current node and all of its relevant parents This // returns a site map node that a developer can then // walk modifying each node Url property in turn // Since the cloned nodes are separate from the underlying // site navigation structure the fixups that are made do not // effect the overall site navigation structure SiteMapNode currentNode = SiteMap CurrentNode Clone(true) SiteMapNode tempNode = currentNode

  // Obtain the recent IDs int forumGroupID = GetMostRecentForumGroupID() int forumID = GetMostRecentForumID(forumGroupID) int postID = GetMostRecentPostID(forumID)

  // The current node and its parents can be modified to include // dynamic querystring information relevant to the currently // executing request if ( != postID)

   tempNode Url = tempNode Url + ?PostID= + postID ToString()

  if ((null != (tempNode = tempNode ParentNode)) &&( != forumID))

   tempNode Url = tempNode Url + ?ForumID= + forumID ToString()

  if ((null != (tempNode = tempNode ParentNode)) &&( != forumGroupID))

   tempNode Url = tempNode Url + ?ForumGroupID= + forumGroupID ToString()

  return currentNode

  这段代码只是给当前路径加载参数

  曾经尝试过使用类似的方法 但是SiteMapPath搞定了 Menu就绑定不上数据了 并且只能处理一部分数据

  后来 结合SiteMapTool那个类 又写出几个函数可以解决这个问题这是修改之后的sitemap文件 加了一个配置项 rule 里面的参数是这个页面需要的参数 如果当前上下文没有这些参数 那么禁止用户访问这个页面

  <siteMapNode url= Course/Group/GroupDetail aspx title= Group Detail rule= cid gid >这是两个函数 递归处理所有的路径 private string MakeURL(SiteMapNode node)

   node ReadOnly = false //find the static url string url = MySiteMap FindForward(node Title) if (node[ rule ] != null && node[ rule ] Length > )

   //if have the rule then check string[] paramSet = node[ rule ] Split( ) //check for (int i = i < paramSet Length i++)

   //if request have not such a param then invoke self to check his parent if (HttpContext Current Request Params[paramSet[i]] == null)

  return MakeURL(node ParentNode) //if pass then add all the params and return the value url += ? for (int i = i < paramSet Length i++)

   string key = paramSet[i] // cid ——> cid= the former format is like rule= cid tid url = url + key + = + HttpContext Current Request Params[key] + & return url Substring( url Length ) //remove last &

   else //if there is no rule then return the url directly return url private void ReBindData(SiteMapNode root)

   string url = MakeURL(root) if (url != )

  root Url = url for (int i = i < root ChildNodes Count i++)

   ReBindData(root ChildNodes[i]) 在ReBindData里面递归调用MakeUrl函数

  MakeUrl函数里面调用的MySiteMap FindForward函数就是来自那位的实现

  不过应用的是后需要做一些改动 他原来的实现是用静态的类如此加载//SiteMapNodeCollection smc = SiteMap RootNode GetAllNodes() //siteMapCol = new NameValueCollection()

  //IEnumerator ie = smc GetEnumerator() //while (ie MoveNext())

cha138/Article/program/net/201311/11277

相关参考

知识大全 体验ASP.NET 2.0中的BuildProvider

体验ASP.NET2.0中的BuildProvider  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 ASP.NET 2.0 中的 Windows 身份验证

ASP.NET2.0中的Windows身份验证  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一

知识大全 ASP.NET 2.0 中的Windows身份验证

ASP.NET2.0中的Windows身份验证  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本

知识大全 理解ASP.NET 2.0中的单点登录

理解ASP.NET2.0中的单点登录  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!摘要 

知识大全 ASP.Net 2.0中的5个数据控件

ASP.Net2.0中的5个数据控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!第一篇的入门帖就

知识大全 ASP.NET 2.0 中的异步页功能应用

ASP.NET2.0中的异步页功能应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!ASPNET提

知识大全 ASP.NET 2.0 中的数据源控件

ASP.NET2.0中的数据源控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ASPNET引

知识大全 ASP.NET 2.0 中的创建母版页

ASP.NET2.0中的创建母版页  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  虽然母版页和内

知识大全 抢先试用ASP.NET 2.0中的新型安全控件

抢先试用ASP.NET2.0中的新型安全控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一引

知识大全 Web Parts在ASP.NET 2.0中的应用

WebParts在ASP.NET2.0中的应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  W