我正在实现一种Dashboard类型的Web应用程序,其中用户具有不同的角色。我必须在页面顶部显示站点地图路径,因为用户浏览仪表板内的不同页面。我使用的是asp.net SiteMapPath,如何将它用于多根节点。我需要根据用户角色实现多个根节点。
例如: - 管理 - > Directory1-> Directory2-> Page1.aspx的
教师 - > Directory1-> Page2.aspx
学生 - >目录2 - > Page1.aspx等。
Admin,Teacher和Student是路径的根节点。
它不应该像Admin-> Teacher-> Directory1-> Page2.aspx
任何解决方案?
感谢。
答案 0 :(得分:1)
您可以使用admin作为根节点,并在asp:Menu
中定义所有内容,
在您的情况下,使用<asp:Menu ID="mainMenu" DataSourceId="siteMapDataSource" runat="server" StaticDisplayLevels="2" StaticSubMenuIndent="0" />
StaticDisplayLevels="2"
将确保始终显示管理员,教师和学生,并且缩进将阻止缩进显示,因为它是默认定义的。
答案 1 :(得分:0)
三个站点地图文件(适用于管理员,教师,学生) 我们已将这些站点地图文件放入App_Data文件夹中, 在用户控件中,我们创建一个公共枚举,以表示可用的不同菜单。
public enum SiteMapMenus
{管理员,教师,学生,NotSet}
SiteMapMenus eMenuToLoad = SiteMapMenus.NotSet; public SiteMapMenus MenuToLoad { get { return eMenuToLoad; } set { eMenuToLoad = value; } }
现在,GetMenuDataSource方法将所需的站点地图文件作为XML文件读取,然后创建并返回可绑定到控件的数据源。
XmlDataSource GetMenuDataSource(SiteMapMenus menu, string serverMapPath) { XmlDataSource objData = new XmlDataSource(); objData.XPath = "siteMap/siteMapNode"; switch (menu) { case SiteMapMenus.Admin:objData.DataFile=serverMapPath + @"\App_Data\Admin.sitemap"; break; case SiteMapMenus.Teacher: objData.DataFile=serverMapPath+@"\App_Data\Teacher.sitemap"; break; case SiteMapMenus.Student: objData.DataFile=serverMapPath+@"\App_Data\Student.sitemap"; break; default: break; } objData.DataBind(); return objData; }
由于数据源现在是XML,而不是从站点地图提供程序返回的格式,我们需要在菜单控件本身上设置数据绑定。
<asp:Menu ID="Menu1" runat="server"> <DataBindings> <asp:MenuItemBinding DataMember="siteMapNode" TextField="title" NavigateUrlField="url" /> </DataBindings> </asp:Menu>
我们现在可以最终将源绑定到控件,这在用户控件的Page_Load事件处理程序中全部启动。
protected void Page_Load(object sender, EventArgs e) { Menu1.DataSource = GetMenuDataSource(eMenuToLoad, Server.MapPath("~")); Menu1.DataBind(); }
使用我们的新菜单现在就像在页面上注册用户控件一样简单,并通过设置MenuToLoad属性指定要显示的菜单。
<DW:MyMenu ID="MyMenu1" runat="server" MenuToLoad="Secure" />
现在,您可以为不同的用户使用不同的不同站点地图.....