〓〓【SiteMapPath】的问题,关注的人都进来。〓〓

Lukiya 2006-03-25 10:52:28
环境:
<siteMapNode url="~/Default.aspx" title="首页">
<siteMapNode url="~/Test.aspx?Action=1" title="新增" />
</siteMapNode>

Test.aspx页面中有一个SiteMapPath。

1、访问Test.aspx?Action=1时可以正常显示,如下
首页 > 新增
2、访问Test.aspx?Action=2&ID=42时无法显示。

问题:

ID是动态的,怎么让SiteMapPath正常显示出来?




搜索到过很多文章,都是讲控制转发的,没有涉及到这个,有懂的不?
...全文
307 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
shamao 2006-04-16
  • 打赏
  • 举报
回复
mark
cat_hsfz 2006-04-05
  • 打赏
  • 举报
回复
刚刚实际用了一下SiteMapProvider。例如你有一个固定的具体SiteMap吧,用web.sitemap描述,然后Product下面的项目应该由数据库提供,那么你就在web.sitemap中写一个这个:
<siteMapNode provider="ProductSiteMapProvider" />
然后,你要有一个MyProductSiteMapProvider,并且在web.config中也注明SiteMapProvider中有一个name="ProductionSiteMapProvider"的指向MyNamespace.MyProductSiteMapProvider,这样这个节点以内的SiteMap就由MyProductSiteMapProvider实现了。

详细你看MSDN关于SiteMapProvider的说明。

注意SiteMap本身或者SiteMap相关控件可是有Cache功能的,所以你的SiteMapProvider不能太过“动态”,否则会不准确。
cat_hsfz 2006-04-04
  • 打赏
  • 举报
回复
其实也不用管SiteMap的DataSet格式,你自己实现一个SiteMapProvider类,然后该类通过Membership和Roles进行特定的校验和输出就行了。
Lukiya 2006-03-28
  • 打赏
  • 举报
回复
好的,我会试试看。

现在新问题是为什么无法在SiteMap文件上设置角色限定TreeView的节点显示,设置了Roles后不是那个角色的会员还是能看到。
cat_hsfz 2006-03-27
  • 打赏
  • 举报
回复
最根本的办法,就是UrlRewrite和自己提供DataSource,呵呵……

首先,要靠UrlRewrite把你的QueryString部分置入Path部分里面,这样SiteMap有关控件才会把两个不同的人的页面识别为两个URL。

然后就是自己提供DataSource。SiteMapDataSource提供的DataSet是否和XmlDataSource差不多我没研究过,但是要自定义动态SiteMap完全可以通过自定义DataSource实现。你要研究下SiteMapDataSource提供的DataSet的形式,然后你自己实现一个DataSource从数据库里按你的方式提供SiteMap数据给SiteMap有关的控件就可以了。
Lukiya 2006-03-27
  • 打赏
  • 举报
回复
有没人知道啊
Lukiya 2006-03-26
  • 打赏
  • 举报
回复
关于删不掉我知道了,糊涂了。

那为什么securityTrimmingEnabled会无效呢?
Lukiya 2006-03-26
  • 打赏
  • 举报
回复
好用,是我没说清楚,再补充下,我同时在左边的框架页里用了一个TreeView

由于
<siteMapNode url="~/Edit.aspx" title="编辑人员" />
所以在树上还是把这个节点显示出来了,点了后右边的框架里的Edit.aspx没有参数,无法确定编辑哪一个人。
我变改了一下
<siteMapNode url="~/Edit.aspx" title="编辑人员" show="false" />

然后

protected void treeMenu_TreeNodeDataBound(object sender, TreeNodeEventArgs e)
{
SiteMapNode node = (SiteMapNode)e.Node.DataItem;
if (node["show"] != null && node["show"].ToLower() == "false")
{
this.treeMenu.Nodes.Remove(e.Node);
}
}
根节点可以删掉,但是其他节点删不掉……

于是我想用roles这个属性来限制他显示,我设置了securityTrimmingEnabled="true",然后

<siteMapNode url="~/Edit.aspx" title="编辑人员" roles="乱设一个角色" />

但是为什么TreeView上还是显示出来了这个节点。起不到按角色限制访问作用呢?
saucer 2006-03-26
  • 打赏
  • 举报
回复
<siteMapNode url="~/Test.aspx" title="新增" />


<asp:SiteMapPath ID="SiteMapPath1" runat="server" OnItemCreated="SiteMapPath1_ItemCreated">
</asp:SiteMapPath>


protected void SiteMapPath1_ItemCreated(object sender, SiteMapNodeItemEventArgs e)
{
if (e.Item.ItemType == SiteMapNodeItemType.Current)
{
Literal l = e.Item.Controls[0] as Literal;
if (l != null)
l.Text += "A君"; //use the username you are currently editing
}
}
saucer 2006-03-26
  • 打赏
  • 举报
回复
用上面连接里的方法,动态改变你的标签
Lukiya 2006-03-26
  • 打赏
  • 举报
回复
To saucer(思归)

表里有那么多数据,我不可能只要ID不同就做张页子吧。

例如一张人员表,我要在后台编辑这些人员。我怎么写呢?

<siteMapNode url="~/Edit.aspx?ID=1" title="编辑A君" />
<siteMapNode url="~/Edit.aspx?ID=2" title="编辑B君" />
<siteMapNode url="~/Edit.aspx?ID=3" title="编辑C君" />


只写~/Edit.aspx又没参数……
写了参数SiteMapPath就失效………………
我先看你给的文章去。
boy_north 2006-03-26
  • 打赏
  • 举报
回复
为什么不设置多少页面呢?

或把这个写到程序中呢
saucer 2006-03-26
  • 打赏
  • 举报
回复
why not you just use

<siteMapNode url="~/Test.aspx" title="新增" />

??

if your Test.aspx means to do a lot of different things depending on Action querystring, then you should consider to use different pages

or you can always add nodes dynamically, see

http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.sitemappath.onitemcreated(VS.80).aspx

Lukiya 2006-03-26
  • 打赏
  • 举报
回复
程序里如何动态设置?我用了MasterPage,哎,郁闷死了。
liudng 2006-03-25
  • 打赏
  • 举报
回复
SiteMap是配置文件 的形式,不能动态改变的呀,建议写到程序里面吧

62,046

社区成员

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

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

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

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