마스터 페이지에서 메뉴 컨트롤을 채우는 가장 좋은 방법은 무엇입니까?

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

문제

데이터 베이스?페이지 변수?열거?

여기서 의견을 구하고 있습니다.

도움이 되었습니까?

해결책

ASP.NET 사이트맵 기능은 이를 위해 만들어졌으며 많은 경우에 잘 작동합니다.원하는 곳에 도착했다면 사이트맵과 다르게 보이는 메뉴. 해결 방법은 다음과 같습니다..

동적 사이트 구조가 있는 경우 다음을 수행할 수 있습니다. 맞춤 사이트맵 제공업체 만들기.가치 있는 것보다 문제가 더 많은 지점에 도달할 수도 있지만 일반적으로 사이트맵에서 메뉴를 채우면 메뉴 옵션이 로그인한 사용자에게 적합한 보안 조정과 같은 몇 가지 멋진 기능이 제공됩니다.

다른 팁

흥미로운 질문이군요. 이에 접근하는 방법은 많습니다.

XML에서 메뉴 구조를 로드할 수 있습니다. 이는 기본 제공 ASP.NET 탐색 컨트롤/"사이트맵" 설정이 작동하는 방식입니다.이는 아마도 전반적으로 좋은 선택일 것이며 Visual Studio에는 이를 위한 상당히 좋은 도구가 있습니다.

많이 변경해야 하는 동적 메뉴인 경우 데이터베이스에서 항목을 가져오는 것이 좋은 생각일 수 있지만 모든 페이지 렌더링 시 DB가 적중되지 않도록 항목을 캐시하는 것이 좋습니다.

나는 다음을 사용하여 사이트를 만들었습니다. ASP.NET 로그인 컨트롤 그리고 양식 인증 ASP.NET 웹 애플리케이션의 멤버십/자격 증명용입니다.그리고 저는 사이트 맵 사이트 탐색용.

SiteMapDataSource를 사용하여 채워진 ASP.NET TreeView 및 메뉴 탐색 컨트롤이 있습니다.그러나 관리자가 아닌 사용자는 출입이 금지된 관리자 전용 페이지를 볼 수 있습니다.

  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. web.config 파일에서 securityTrimmingEnabled를 "true"로 설정했습니다…

    <?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가 형편없습니다.그런 다음 다시 모든 타사 제어 라이브러리가 그렇다고 가정합니다.

효율적인 액세스는 사용자 관점에서 볼 때 가장 중요한 기능입니다.일반적인 암시적 접근 방식은 다음과 같습니다.사전 조회, 그것은 크고 중첩 된 메뉴 구조에도 잘 맞습니다.사용자는 클릭이나 고유한 키 누르기를 통해 탐색할 수 있으며, 추가로 화살표 키를 사용하여 평소처럼 위/아래로 이동(오른쪽)하거나 뒤로(왼쪽) 이동할 수 있습니다.요청 시 초기 메뉴를 제외하고 메뉴를 채우고 최종 요소가 선택될 때마다 자바스크립트 작업을 제공하는 것이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top