动态修改SiteMap节点的问题

sans 2006-12-29 10:52:27
在网络上面找了一遭,结果基本上都是下面的代码,试了试,不行,而且我还没有看明白这段代码的意思,据说是MSDN上面的,本想验证一下,可惜硬盘上面的MSDN坏了,在线的MSDN又进不去,大概是受台湾地震的影响吧。

谁能够提供一个能够使用的代码来看看?

首先在Page_Load中添加SiteMapResolve事件:
protected void Page_Load(object sender, EventArgs e)
{
SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(this.ExpandForumPaths);
}

然后在事件处理函数中这样做:
private SiteMapNode ExpandForumPaths(Object sender, SiteMapResolveEventArgs e)
{
SiteMapNode currentNode = SiteMap.CurrentNode.Clone();
SiteMapNode tempNode = currentNode;

// Obtain the recent IDs.
int forumGroupID = GetMostRecentForumGroupID();
int forumID = GetMostRecentForumID(forumGroupID);
int postID = GetMostRecentPostID(forumID);
if(0 != postID)
{
tempNode.Url = tempNode.Url + "?BID=" + postID.ToString();
}
if((null != (tempNode = tempNode.ParentNode)) && (0 != forumID))
{
tempNode.Url = tempNode.Url + "?TOPIC_ID=" + forumID.ToString();
}
if ((null != (tempNode = tempNode.ParentNode)) &&(0 != forumGroupID))
{
tempNode.Url = tempNode.Url + "?ForumGroupID=" + forumGroupID.ToString();
}
return currentNode;
}

在实际使用时,SiteMapNode currentNode = SiteMap.CurrentNode.Clone();这一句出错,大意是CurrentNode是空值。
另外,currentNode又没有使用过,返回它有用吗?
...全文
419 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fireworksloveyou 2006-12-31
  • 打赏
  • 举报
回复
先祝各位csdn朋友新年快乐~
然后抢分 呵呵 ~
sans 2006-12-30
  • 打赏
  • 举报
回复
请举个例子
myminimouse 2006-12-30
  • 打赏
  • 举报
回复
你是用xml?用sql不是挺简单么
seeupseeup 2006-12-30
  • 打赏
  • 举报
回复
没用过
帮你顶~~~
sans 2006-12-30
  • 打赏
  • 举报
回复
多谢lhcoolhacker(hugh-lin),我试试看
sans 2006-12-30
  • 打赏
  • 举报
回复
web.sitemap可以动态修改吗?怎么改,请举个例子,谢谢。
lhcoolhacker 2006-12-30
  • 打赏
  • 举报
回复
通常这类改变建议写在Global.aspx页面里,参考如下:
<%@ Application Language="C#" %>

<script runat="server">

void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
SiteMap.Providers["CommonPathSiteMapProvider"].SiteMapResolve +=
new SiteMapResolveEventHandler(AppendQueryString);
}

SiteMapNode AppendQueryString(object sender, SiteMapResolveEventArgs e)
{
if (e.Provider.CurrentNode != null)
{
SiteMapNode node = e.Provider.CurrentNode.Clone(true);
Uri uri = new Uri(e.Context.Request.Url.ToString());
node.Url += uri.Query;
string title = e.Context.Request.QueryString.Get("pathtitle");

if (!string.IsNullOrEmpty(title))
{
node.Title = Server.HtmlEncode(title);
}

return node;
}
else
{
return null;
}
}

void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码

}

void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码

}

void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码

}

void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。

}

</script>
cherry_j 2006-12-30
  • 打赏
  • 举报
回复
web.sitemap是xml格式,当然可以编辑的。
同xml的编辑方法
POPO_POPO 2006-12-30
  • 打赏
  • 举报
回复
没用过
帮你Up

62,242

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧