Несколько корневых узлов в asp.net SiteMapPath (Web.sitemap)

Я реализую веб-приложение типа Dashboard, где пользователи имеют разные роли. Я должен показать путь к карте сайта вверху страницы, так как пользователь просматривает разные страницы внутри панели инструментов. Я использую asp.net SiteMapPath, как я могу использовать его для множественного корневого узла. Мне нужно реализовать несколько корневых узлов в соответствии с ролями пользователей.

Пример:- Admin->Directory1->Directory2->Page1.aspx

Учитель-> Directory1-> Page2.aspx

Student-> Directory2-> Page1.aspx и так далее.

Где Admin, Teacher и Student являются корневыми узлами пути.

Это не должно быть похоже на Admin->Teacher->Directory1->Page2.aspx

Любое решение?

Благодарю.

2 ответа

Вы можете использовать администратора в качестве корневого узла и определить все в asp:Menu, в вашем случае, используйте <asp:Menu ID="mainMenu" DataSourceId="siteMapDataSource" runat="server" StaticDisplayLevels="2" StaticSubMenuIndent="0" />StaticDisplayLevels="2" будет следить за тем, чтобы администратор, учитель и ученик были всегда представлены, а отступ не позволял бы им показывать отступ, как это определено по умолчанию.

  • файл карты для трех сайтов (для администратора, учителя, ученика). Мы поместили эти файлы карты сайта в папку 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" />
    

Теперь вы можете использовать разные карты сайта для разных пользователей.....

Другие вопросы по тегам