1

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

例如:- Admin->Directory1->Directory2->Page1.aspx

教师->目录1->Page2.aspx

Student->Directory2->Page1.aspx 等等。

其中 Admin、Teacher 和 Student 是路径的根节点。

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

有什么解决办法吗?

谢谢。

4

2 回答 2

1

您可以使用 admin 作为根节点,并在 中定义所有内容asp:Menu,在您的情况下,使用<asp:Menu ID="mainMenu" DataSourceId="siteMapDataSource" runat="server" StaticDisplayLevels="2" StaticSubMenuIndent="0" />StaticDisplayLevels="2"确保始终显示 admin、teacher 和 student,并且 indent 将防止它出现缩进,因为它是默认定义的.

于 2013-07-09T12:35:02.140 回答
0
  • 三个站点地图文件(对于管理员、教师、学生) 我们已将这些站点地图文件放入 App_Data 文件夹中,在用户控件中,我们创建一个公共枚举,以表示可用的不同菜单。

    public enum SiteMapMenus  
    

    { 管理员、教师、学生、未设置 }

    • 然后创建了一个公共属性来在设计时设置菜单类型。
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" />
    

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

于 2013-02-18T13:23:14.210 回答