Как лучше всего заполнить элемент управления меню на главной странице?

StackOverflow https://stackoverflow.com/questions/54118

Вопрос

База данных?Переменные страницы?Перечисление?

Я ищу мнения здесь.

Это было полезно?

Решение

Функция Sitemap ASP.NET создана для этого и во многих случаях работает хорошо.Если вы окажетесь в месте, где вам нужен ваш Меню должно отличаться от вашего файла Sitemap. Вот несколько обходных путей..

Если у вас динамическая структура сайта, вы можете создать собственный поставщик карт сайта.Вы можете дойти до того, что это будет больше проблем, чем пользы, но в целом заполнение меню из карты сайта дает вам некоторые приятные функции, такие как обрезка безопасности, при которой параметры меню подходят для вошедшего в систему пользователя.

Другие советы

Это интересный вопрос, есть много способов подойти к нему.

Вы можете загрузить структуру меню из XML, именно так работают встроенные элементы управления навигацией ASP.NET/настройка «карты сайта».В целом это, вероятно, хороший выбор, и в Visual Studio для него есть достаточно хорошие инструменты.

Если это динамическое меню, которое нужно сильно изменить, получение элементов из базы данных может быть хорошей идеей, но вам определенно захочется их кэшировать, чтобы БД не попадала в базу данных при каждом рендеринге страницы.

Я создал сайт, используя Элементы управления входом в ASP.NET и Аутентификация с помощью форм для членства/учетных данных для веб-приложения ASP.NET.И я использую карта сайта для навигации по сайту.

У меня есть элементы управления навигацией ASP.NET TreeView и меню, заполненные с помощью SiteMapDataSource.Но запрещенные страницы только для администратора видны пользователям, не являющимся администраторами.

  1. Я создал файл карты сайта web.sitemap.И я использовал инструмент администрирования веб-сайта ASP.NET для настройки правил доступа.

  2. Я добавил элементы управления навигацией на свою страницу .master…

    <asp:SiteMapPath ID="SiteMapPath1" runat="server" />
    <asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource2" />
    <asp:TreeView ID="TreeView1" runat="server"  DataSourceID="SiteMapDataSource1" />
    <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
    <asp:SiteMapDataSource ID="SiteMapDataSource2" runat="server" ShowStartingNode="False" />
    
  3. Я установил для параметра SecurityTrimmingEnabled значение «true» в файле web.config…

    <?xml version="1.0"?>
    <configuration>
        ...
        <system.web>
            ...
            <siteMap defaultProvider="default">
                <providers>
                    <clear/>
                    <add name="default"
                        type="System.Web.XmlSiteMapProvider"
                        siteMapFile="web.sitemap"
                        securityTrimmingEnabled="true"/>
                </providers>
            </siteMap>
            ...
        </system.web>
        ...
    </configuration>
    
  4. Я скорректировал дерево в коде файла master.vb…

    Protected Sub TreeView1_DataBound( ByVal sender As Object, ByVal e As EventArgs ) Handles TreeView1.DataBound
    
        'Collapse unnecessary menu items...
        If TreeView1.SelectedNode IsNot Nothing Then
            Dim n As TreeNode = TreeView1.SelectedNode
            TreeView1.CollapseAll()
            n.Expand()
            Do Until n.Parent Is Nothing
                n = n.Parent
                n.Expand()
            Loop
        Else
            TreeView1.ExpandAll()
        End If
    
    End Sub
    

ЕСЛИ меню динамическое на пользователя тогда вам придется обратиться к базе данных для каждого пользователя.С тех пор я, вероятно, буду хранить его в сеансе, чтобы избежать будущих обращений к базе данных.

Если он динамический, но весь сайт видит одни и те же элементы, то поместите его в базу данных и закешируйте результаты.

Привязка к файлу Sitemap, безусловно, является самым простым способом.

Это полностью зависит от того, как работает сайт.Я согласен со многими, что карта сайта обычно является лучшим способом сделать это.Однако если вы используете CMS, вам может потребоваться сохранить ее в базе данных.Если у вас сайт, ориентированный на таксономию, используйте таксономию для создания меню.Не существует «лучшего способа» навигации, есть только лучший способ для данной ситуации.

У нас есть похожая функция.

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

Несколько соглашений и продуманная структура базы данных гарантируют, что код загрузки меню является универсальным и автоматически переходит к нужному экрану при выборе определенного пункта меню.Мы используем UIP для навигации и ComponentArt для веб-элементов управления.

Кстати, ComponentArt отстой.Опять же, я полагаю, что все сторонние библиотеки управления так и делают.

Эффективный доступ является основной функцией с точки зрения пользователя.Общий суггестивный подход – этопоиск по словарю, это хорошо подходит для больших и вложенных структур меню.Пользователь перемещается с помощью щелчков мышью или уникальных нажатий клавиш, а также клавиш со стрелками вперед (вправо) или возврата (влево) с помощью кнопок вверх/вниз, как обычно.Я бы предложил заполнять меню по запросу, кроме начального, и предоставлять действие JavaScript всякий раз, когда выбирается последний элемент.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top