2011-01-31 4 views
1

웹 사용자 컨트롤 (BuildMenu.ascx) 인 페이지 맨 위에 mainNavigator 패널이있는 마스터 페이지를 만들었습니다. 나는 마스터 페이지의 로딩 UC 메뉴를 작성하고 있습니다 :마스터 페이지에서 한 번만 메뉴를로드하는 방법은 무엇입니까?


    protected void Page_Load(object sender, EventArgs e) 
     { 

      if (!IsPostBack) 
      { 
       // Fill Menu from DataBase (Compare SiteMap...) 
      } 

모든 BuildManu.ascx 때마다로드 다시 게시

BuildMenu.ascx.cs :


<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="IntermMaster.master.cs" Inherits="MyProject.IntermMaster" EnableViewState="true" %> 

<%@ Register src="Utils/BuildMenu.ascx" tagname="BuildMenu" tagprefix="uc1" %> 

> 
    <asp:ContentPlaceHolder ID="head" runat="server"> 

    </asp:ContentPlaceHolder> 
</head> 
<body> 
    <form id="form1" runat="server"> 

     <uc1:BuildMenu ID="BuildMenu2" runat="server" /> 
    </div> 
    <div> 

     <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> 
     </asp:ContentPlaceHolder> 
    </div> 
    </form> 
</body> 

이것은 다시 게시 이벤트로드 tihs 정말 지루합니다. 어떻게 해결할 수 있을까요? 난 당신이 프레임을 사용하지 않으려면

enter image description here

+0

변경된 사항 만 검토하려면 컨트롤이 항상 다시로드됩니다. 렌더링 된 컨트롤이 캐시되므로 아무 것도 변경되지 않으면 컨트롤을 표시하는 데 더 많은 계산 시간이 필요하지 않으므로 캐시 된 버전이 사용됩니다. 이 점에 대해 걱정할 필요는 없습니다. 캐시는 성능을 보존 할 것이고, 컨트롤에서 무언가가 변경 될 경우 캐시를 플러시하지 않아도 변경 내용을 볼 수 있습니다. 개인적으로 나는 이것이 바람직한 행동 IMHO라고 생각한다. 토론을 위해 분명히 열어 ... – Bazzz

+0

@Bazzz; 나는 너와 동의한다. 잠깐 생각 해봐. 나는 그것이 정말로 정말로 헛소리 다라고 생각한다. 왜 콘텐츠 위치 보유자 만 채울 수 있습니까? – Penguen

답변

3

을 (마스터 페이지에서) 한 번만로드 BuildMenu.ascx을 수행 할 (그리고 당신은 아마 안), 제어마다 그 수를 다시로드해야합니다 렌더링 될 수 있습니다. 서버 측 출력 캐싱을 사용하면 제어를로드하는 데 소요되는 처리 시간이 적게 걸릴 수 있습니다.

는, 출력 캐싱을 페이지에 넣고하려면

<%@ OutputCache Duration="[Number of Seconds]" VaryByParam="None" %> 
+0

감사하지만 마스터 페이지를 추가하지 않습니다. 마스터에서 지워졌습니다. 어떤 웹 페이지도 작동하지 않습니다. ( – Penguen

+0

"작동하지 않는다는 의미를 설명해 주시겠습니까?" ASP.NET 페이지 수명주기 문서에 대한 링크는 – Jacob

1

방법 때마다 다시 게시 occures라고 (AJAX 페이지를 제외하고,하지만 이제 거기에 가지 말자)됩니다 부하. ASP.NET page lifecycle을 살펴보십시오.

IsPostBack 값이 true이면 컨트롤로드 이벤트에서 반환 할 수 있습니다.

그러나 해당 컨트롤이 서버에서 output cashing을 사용하여 시도 할 수있는 콘텐츠에 정적 (또는 거의 정적) 인 경우 컨트롤이 잠시 동안로드되고 나머지 시간에는 서버 현금화 된 사본을 사용할 것입니다.

+0

+1입니다. @Phsika, ASP.NET Web Forms의 작동 방식을 이해하는 데 가장 유용한 정보입니다. – Jacob

0

내가이 ::

보호 무효를 Page_Load (개체를 보낸 사람, EventArgs입니다 전자) {

 if session(ispostback") <> "menuloaded" 
     { 
      // Fill Menu from DataBase (Compare SiteMap...) 
      Session("ispostback")="menuloaded" 
     } 
처럼 만들 그것은 당신에게

도움이 될 것입니다 당신은 왜 세션을 고소 해달라고 더 나은 아이디어를 가지고

이것이 올바르게 작동합니다.

관련 문제