asp.net SiteMapPath中的多个根节点(Web.sitemap)

时间:2013-02-16 06:59:51

标签: asp.net sitemap sitemappath web.sitemap

我正在实现一种Dashboard类型的Web应用程序,其中用户具有不同的角色。我必须在页面顶部显示站点地图路径,因为用户浏览仪表板内的不同页面。我使用的是asp.net SiteMapPath,如何将它用于多根节点。我需要根据用户角色实现多个根节点。

例如: - 管理 - > Directory1-> Directory2-> Page1.aspx的

教师 - > Directory1-> Page2.aspx

学生 - >目录2 - > Page1.aspx等。

Admin,Teacher和Student是路径的根节点。

它不应该像Admin-> Teacher-> Directory1-> Page2.aspx

任何解决方案?

感谢。

2 个答案:

答案 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" />
    

现在,您可以为不同的用户使用不同的不同站点地图.....