Каков наилучший способ заполнить элемент управления меню на главной странице? - PullRequest
3 голосов
/ 10 сентября 2008

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

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

Ответы [ 8 ]

4 голосов
/ 10 сентября 2008

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

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

2 голосов
/ 10 сентября 2008

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

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

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

1 голос
/ 12 сентября 2008

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

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

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

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

    <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 & hellip;

    <?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 за файлом & hellip;

    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
    
0 голосов
/ 06 августа 2010

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

0 голосов
/ 10 сентября 2008

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

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

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

BTW ComponentArt отстой. С другой стороны, я полагаю, что все сторонние управляющие библиотеки делают.

0 голосов
/ 10 сентября 2008

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

0 голосов
/ 10 сентября 2008

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

0 голосов
/ 10 сентября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...