环境:
<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正常显示出来?
搜索到过很多文章,都是讲控制转发的,没有涉及到这个,有懂的不?
<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正常显示出来?
搜索到过很多文章,都是讲控制转发的,没有涉及到这个,有懂的不?
<siteMapNode url="~/Edit.aspx?ID=2" title="编辑B君" />
<siteMapNode url="~/Edit.aspx?ID=3" title="编辑C君" />
只写~/Edit.aspx又没参数……
写了参数SiteMapPath就失效………………
我先看你给的文章去。
<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
}
}
<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上还是显示出来了这个节点。起不到按角色限制访问作用呢?
<siteMapNode provider="ProductSiteMapProvider" />
然后,你要有一个MyProductSiteMapProvider,并且在web.config中也注明SiteMapProvider中有一个name="ProductionSiteMapProvider"的指向MyNamespace.MyProductSiteMapProvider,这样这个节点以内的SiteMap就由MyProductSiteMapProvider实现了。详细你看MSDN关于SiteMapProvider的说明。注意SiteMap本身或者SiteMap相关控件可是有Cache功能的,所以你的SiteMapProvider不能太过“动态”,否则会不准确。