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

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

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


person Sara Chipps    schedule 10.09.2008    source источник


Ответы (8)



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

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

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

person Guy Starbuck    schedule 10.09.2008

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

У меня есть элементы управления навигацией ASP.NET TreeView и Menu, заполненные с помощью 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
    
person Zack Peterson    schedule 11.09.2008

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

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

person Ben Scheirman    schedule 10.09.2008

Привязать к Sitemap, безусловно, проще всего.

person NakedBrunch    schedule 10.09.2008

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

person Danimal    schedule 10.09.2008

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

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

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

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

person Alvaro Rodriguez    schedule 10.09.2008

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

person Roland Frank    schedule 06.08.2010