2012. 11. 15. 15:00

1. 문제의 발견

별생각 없이 사용하던 코드를 붙여놓고 돌리니..

Microsoft JScript 런타임 오류: '__doPostBack'이(가) 정의되지 않았습니다.

 

 

그래서 생성된 코드를 보니까..

 

해당 버튼이 생성이 안됐네?

그래서 버튼을 다시 생성했지만 그래도 같은 현상입니다-_-;

 

 

2. 원인

검색해보니 스텍오버플로우에 이런 글이 있군요.

__doPostBack()를 사용하려면 포스트 백(post back)을 하는 컨트롤이 있어야 한다.

참고 : stackoverflow - __doPostBack is not defined - Don Tato 님 답변

 

그런데 버튼은 포스트 백을 일으키는 컨트롤인데 왜 안 되지-_-;;;

 

 

3. 해결 방법

같은 글에 친절하신 분들이 강제로 포스트 백을 삽입할 방법을 써주셨습니다.

 

다음 코드를 Page_Load

ClientScript.GetPostBackEventReference(this, string.Empty);

넣으시면 정상적으로 __doPostBack()가 동작합니다.

 

 

만약 이 방법이 좀 거슬린다 싶으시면 이전에 "[ASP.Net] 자바스크립트에서 비하인드 호출하기"에서 소개한

<%= Page.GetPostBackEventReference([숨겨진 컨트롤 이름]) %>

이 방법을 쓰셔도 됩니다.

(참고 : [ASP.Net] 자바스크립트에서 비하인드 호출하기)

 

 

마무리

웹폼(WebForm)도 이럴 때 보면 은근히 불편합니다.