知识大全 使用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.NET2.0中的单点登录 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!摘要
ASP.Net2.0中的5个数据控件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!第一篇的入门帖就
ASP.NET2.0中的异步页功能应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!ASPNET提
ASP.NET2.0中的数据源控件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ASPNET引
ASP.NET2.0中的创建母版页 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 虽然母版页和内
抢先试用ASP.NET2.0中的新型安全控件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一引
知识大全 Web Parts在ASP.NET 2.0中的应用
WebParts在ASP.NET2.0中的应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! W