Несколько корневых узлов в 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" />
Теперь вы можете использовать разные карты сайта для разных пользователей.....