2013-02-28 2 views
0

메뉴 모음이있는 마스터 페이지가 있습니다. 이 메뉴는 수십 가지 옵션이있는 사이트 맵에 연결됩니다. 내가 한 것은 각 메뉴 항목에 아이콘을 렌더링하는 것입니다.각 포스트 백에서 Asp.NET 메뉴 아이콘 렌더링

protected void NavigationMenu_MenuItemDataBound(object sender, MenuEventArgs e) 
    { 
    SiteMapNode node = e.Item.DataItem as SiteMapNode; 

    if (!string.IsNullOrEmpty(node["imageUrl"])) 
     e.Item.ImageUrl = node["imageUrl"];  
    } 

나는 각 포스트에서이 이벤트가 발생한다는 것을 알고 있습니다. 한 번로드하고 다시로드 할 필요가없는 방법이 있습니까?

+0

사용자 정의 컨트롤 안에 넣고 캐시를 사용하십시오. – Aristos

+0

샘플 코드를 알려주시겠습니까? 나는 그것을 세션으로 확인하고있다. 그것은 틀린가? –

답변

0

핸들러는 모든 데이터 바인딩 이벤트에서 실행됩니다. 이 이벤트는 일반적으로 ViewState가 추적 된 후에 이미지 URL이 설정되면 컨트롤의 ViewState로 이동하므로 모든 게시물에서 다시 실행되지 않습니다.

그 의미는 컨트롤 (메뉴)의 DataBind()가 명시 적으로 호출되지 않으면이 이벤트가 트리거되지 않는다는 것입니다.

이것은 적어도 다른 데이터 바인딩 컨트롤이 수행하는 작업입니다. 예를 들어 그리드는 상태를 다시 빌드해야하는 페이징/정렬 등의 작업을 제외하고는 모든 게시물에서 다시 바인딩되지 않습니다.

+0

네,하지만 모든 게시물에 다시 그려지는 메뉴를 볼 수 있습니다. 이것은 나 빠지고 페이지가 느리다는 느낌을줍니다. –

+0

물론 그렇습니다. 전체 페이지가 포스트 백에서 다시 칠합니다. 당신의 우려가 여기에 있는지 모르겠습니다. 이미지의 로딩 시간이 느려지는 경우 걱정하지 않으시면 캐쉬하거나 페이지의 메뉴 영역에 출력 캐시를 사용할 수 있습니다. http://msdn.microsoft.com/en-us/library/xsbfdd8c(v=vs.71).aspx – rusev

관련 문제