태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

자바스크립트에서 서버측 이벤트 핸들러 호출하기.

from Taeyo 즉, 쉽게 말하면... 클라이언트 자바스크립트 만으로, 서버 측의 이벤트 핸들러를 호출할 수가 있다면 지금의 문제는 해결될 수가 있다는 것입니다... 다시 한번 더 쉽게 풀면, 자바스크립트를 사용해서 서버측..

Method : RegisterClientScriptBlock(), RegisterStartupScript()

공통점 ; 스크립트(일반적으로 자바스크립트) 코드를 등록하거나 호출할 때 사용한다. 차이점 ; RegisterStartupScript 는 스크립트 코드를 HTML 시작위치에 삽입한다. ; RegisterClientScriptB..

자바스크립트에서 서버측 이벤트 핸들러 호출하기.

|

from Taeyo

즉, 쉽게 말하면... 클라이언트 자바스크립트 만으로, 서버 측의 이벤트 핸들러를 호출할 수가 있다면 지금의 문제는 해결될 수가 있다는 것입니다...

다시 한번 더 쉽게 풀면, 자바스크립트를 사용해서 서버측의 btnDelete_Click 이벤트 처리기를 호출할 수만 있다면 문제가 풀릴 수 있다는 것이지요.... 하지만, 이게 쉽다면... 얼마나 좋겠습니까??? 결코 쉽지가 않다는 것이 문제입니다...

일단, 기본적인 방법으로는 이것은 사실상 불가능에 가깝습니다. 약간의 편법을 사용하지 않는다면 말이지요. 그렇다면, 말입니다... 그넘의 편법이라는 것은 무엇일까???  그게 포인트일 것 같다는 생각이 들지요???

일단, 하나씩 짚어나가 봅시다. ASP.NET이라 할지라도 어차피 결과 페이지는 단순한 HTML 페이지라는 것은 명확합니다. 그렇다면, 어떻게 ASP.NET에서는 버튼이 클릭될 경우, 그 버튼의 Click 이벤트가 서버에서 일어날 수 있는 것일까요??? 의외로 간단합니다. 각각의 버튼은 HTML 결과로 생성될 경우, 모두 submit 버튼으로써 생성이 됩니다. 다시 말해서, 모든 ASP.NET의 버튼은 기본적으로 서브밋 버튼이라는 것이지요. 해서, 일단 사용자가 버튼을 클릭하면 버튼은 무조건 페이지를 서버로 서브밋합니다. 그리고, 서브밋과 함께 현재 어떤 버튼이 클릭되어져서 폼이 서브밋 되는지 그 버튼의 ID 정보도 같이 서브밋을 하지요...

서버는 그 ID 정보를 읽어와서, 그 ID에 해당하는 컨트롤의 Click 이벤트를 처리하는 것입니다. 쉽죠???? 그렇다면, 버튼이 아닌 링크의 경우에는 어떻게 처리될까요?? 예를 들면, 링크버튼(LinkButton)과 같은 경우는 말입니다. 링크 버튼은 모습은 하이퍼링크의 형태를 가지고 있습니다. 형태가 하이퍼링크이다보니 이는 결과 HTML 페이지 상에서 결코 서브밋 버튼으로 구성될 수는 없습니다. 하지만, 이 친구도 서버측의 이벤트를 아주 잘 수행하고 있지요...  ^^;  바로 이 부분에 편법이 숨어있는 것입니다.

결론적으로 말하면, 링크버튼이 폼에 포함된 경우는, ASP.NET이 자동으로 결과 HTML에 특별한 자바스크립트 함수를 하나 추가합니다. 잠시 뒤에 보겠지만, 그 함수는 __doPostback 라는 이름을 가지고 있지요. 그리고, 이 함수가 바로 폼을 서브밋하는 역할을 합니다. 그리고, 이 함수의 첫번째 인자로는 현재 이벤트를 일으킨 컨트롤의 ID가 자리하게 되지요. 내부적으로 이렇게 동작을 한다는 것입니다.

즉, 이 링크버튼이 만들어 내는 __doPostback 자바스크립트 함수를 잘만 이용하면, 우리는 개발자 맘대로 자바스크립트 함수에서 원하는 버튼 컨트롤의 서버측 Click 이벤트를 일으키게 만들 수 있다는 것입니다. __doPostback 함수의 첫번째 인자로 호출하고자 하는 컨트롤의 ID를 지정해서 말이지요 ^^;

--

자동생성 되는 __doPostBack 함수
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}


사용방법
    <script type="text/javascript">
        function checkEnterSearch() {
            if (event.keyCode == 13) {
                __doPostBack('<%=Button1.UniqueID %>', '');
            }

        }   
    </script>

--

<%=Button1.UniqueID %> 를 사용하면 페이지를 실행시키고 소스보기를 하지 않아도 자동으로 렌더링된 이름을 찾아준다.
참고로 마스터 페이지를 사용하지 않았을 경우에는 <%=Button1.ClientID %> 로 찾을 수 있다.

저작자 표시 비영리 변경 금지
Trackback 0 And Comment 0

Method : RegisterClientScriptBlock(), RegisterStartupScript()

|

공통점
 ; 스크립트(일반적으로 자바스크립트) 코드를 등록하거나 호출할 때 사용한다.

차이점
 ; RegisterStartupScript 는 스크립트 코드를 HTML 시작위치에 삽입한다.
 ; RegisterClientScriptBlock 는 스크립트 코드를 HTML 끝나는 위치에 삽입한다.
저작자 표시 비영리 변경 금지
Trackback 0 And Comment 0

크로스도메인 정책파일 (실버라이트)

|

크로스도메인으로 인한 문제가 이런저런 이유로 발생하고 있어서 차단하고 있는 추세인것 같습니다.
실버라이트 역시 크로스 도메인이 금지되어 있습니다.
실버라이트에서 같은 도메인내에 WCF서비스가 제공되지 않는다면 WCF 서비스를 이용하기 위해서
크로스도메인 접근을 허용하도록 WCF 서비스 서버측에 '크로스도메인 정책 파일'을 심어 두어야 합니다.

clientaccesspolicy.xml 파일은 실버라이트용
crossdomain.xml 은 플래시용

실버라이트에서는 플래시용 크로스도메인 정책파일도 지원합니다.

저작자 표시 비영리 변경 금지
Trackback 0 And Comment 0
prev | 1 | 2 | 3 | 4 | 5 ... | 11 | next