2010-03-17 2 views
1

사용자 정의 컨트롤에 트리 뷰가 있습니다. 모든 asynch postback 함께 오른쪽 위치에있는 div 스크롤하려면 자바 스크립트 함수를 실행해야합니다. 나는 그것을 작동시키고 있지만, 그것을 할 수있는 "깨끗한"방법이 있어야한다고 생각합니다. 컨트롤의 Page_Load 함수에는 다음 코드가 있습니다. 그것을 할 수있는 더 좋은 방법이 있습니까?모든 포스트 백을 실행할 때 Javascript 함수를 어떻게 등록합니까?

이 답변을 검색하는 사용자를 위해 여기에 제가 마침내 효과를 냈습니다. ASCX 페이지의 상단에, 나는 다음과 같은 코드가 있습니다


<script type="text/javascript"> 
    function pageLoad(sender, args) { 
     Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(SavePosition); 
     Sys.WebForms.PageRequestManager.getInstance().add_endRequest(RestorePosition); 
    } 

    function SavePosition(sender, args) { 
     document.getElementById('hdnScrollSaver').value = document.getElementById('reportTreeViewdiv').scrollTop; 
    } 
    function RestorePosition(sender, args) { 
     document.getElementById('reportTreeViewdiv').scrollTop = document.getElementById('hdnScrollSaver').value; 
    } 

</script> 

을 그리고 다음과 같이 나는 div 태그의 트 리뷰를 포장 :이 사람을 도움이


<div class="reportTreeView" id="reportTreeViewdiv"> 
        <asp:TreeView ID="TreeView1" runat="server" OnTreeNodePopulate="TreeView1_TreeNodePopulate" 
         OnSelectedNodeChanged="TreeView1_SelectedNodeChanged" PathSeparator="|" SkinID="ReportTreeView" /> 
       </div>

희망을.

답변

4

Ajax는 ASP.Net 페이지와 비슷하지만 클라이언트 측에서 페이지 수명주기를 제공합니다. 따라서 pageLoad 이벤트에서 각 시작 요청 및 끝 요청에서 호출 할 함수를 연결할 수 있습니다.

function pageLoad(sender, args) { 
    Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginRequest); 
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequest); 
} 

function beginRequest(sender, args) { 
     // begin request code - i.e. make a "processing" div visible 
} 

function endRequest(sender, args) { 
     // we are back 
     RestorePosition(); 
} 
+0

이렇게했습니다. 도와 주셔서 감사합니다. – Kevin

1

나는 이것이 "깨끗한"방법이라고 생각합니다. ScriptManager를 사용하는 방식을 사용하고 있습니다.

코드 줄 모양이 마음에 들지 않으면 언제든지 "Script Utility"클래스 또는 그 밖의 항목으로 리팩토링 할 수 있습니다. 나는 안 그럴거야.하지만 그건 나 뿐이야.

+0

모든 포스트 백에서 임의의 키 이름을 사용하여 RegisterStartupScript를 실행해야하는 것으로 해킹당한 것 같습니다. 모든 포스트 백 이후에 스크립트를 실행할 수있는 RegisterPostbackScript와 같은 기능이 있어야합니다. – Kevin

+0

모든 포스트 백에 고유 한 키를 지정하는 이유를 이해하십시오. 매번 키가 동일하면 잘 작동합니다. 당신이하는 일은 페이지의 특정 렌더링을위한 스크립트를 등록하는 것뿐입니다. 그 밖에서, 당신은 그것을 사용하게 될 방식으로 사용하고 있습니다. 동의합니다. 가장 아름다운 코드 줄처럼 보이지는 않을 수도 있지만 원하는대로 정확하게 수행하고 있습니다. 브라우저에서 페이지가로드 될 때 클라이언트 측 스크립트를 실행하십시오. –

+0

모든 포스트 백에서 고유 한 키 이름을 지정하지 않으면 불어납니다. – Kevin

1

나는이 일을 올바르게 수행하고 있다고 생각합니다. 나는 유일한 열쇠를 없애 버릴 것이다. MSDN으로 당

는 :

키와 스크립트를 식별함으로써, 다수의 서버 제어 인스턴스는 회 출력 스트림에 방출되지 않고 스크립트 블록을 요청할 수있다.

동일한 키 매개 변수 값을 갖는 모든 스크립트 블록은 중복으로 간주됩니다.

키는 스크립트가 여러 번 생성되는 것을 방지하기 위해 사용되므로 사용자의 경우 고유하지 않아도됩니다.