728x90
반응형
이번 프로젝트를 진행을 하다가 asp.net 의 cs 쪽에서 InnerHTML 를 이용하여 html 태그를 생성하여야 되게 되었다. 생성한 태그에 button 컨트롤이 들어 있는데 버튼 생성을 하는 것은 쉽게 되었다. 하지만 아무리 시도를 해봐도 서버쪽 이벤트가 발생하지 않았다.
그렇게 몇시간을 해매다가 검색한 글 중 보이는게 InnerHTML로 생성한 버튼에 runat="server"는 그냥 텍스트로써 역할만 할 뿐 서버 컨트롤이 될 수 없다는것. 한동안 멍하니 모니터만 쳐다 보았다.
멍하니 앉아 있을수 만은 없는법!! 열심히 방법을 찾던 중 자바스크립트를 이용하여 asp.net 비하인드 코드 메소드를 발생시킬 수 있다는 글을 발견하여 시도해 보았다. 음 필자가 제대로 습득하지 못한 이유로 몇시간을 해매었다. ㅠ
그렇게 해매며 시도한지 몇시간 후...새롭게 시도를 해보니 실행이 되는것...허얼 ㅠ 내 아까운 시간들 ㅠ
이제 자바스크립트에서 asp.net 의 비하인드 코드의 메소드를 실행시키는 것을 알아보도록 하겠다.
의외로 간단하고 이해하기도 쉽다.
우선 자바스크립트에서 비하인드 코드 메소드를 실행할 때 방법은 이렇다
__doPostBack(컨트롤이름,'');
위와 같은 방법으로 실행이 가능하다. 하지만 .net에서 자동 생성하는 부분이어서 개발자가 별도로 작성하여도 자동으로 바뀔 가능성이 있다. 또한 .net에서 자동으로 생성하지 않는 경우도 발생할 수 있다고 한다. 그래서 위 방법을 사용 하기 보다는 아래의 방법으로 하기를 바란다.
<%= Page.GetPostBackEventReference(컨트롤이름) %>
위 코드를 사용하면 자동으로 __doPostBack()을 생성하여 준다.
여기서 주의 할 점이라면 컨트롤이름을 가진 실제 컨트롤이 존재 해야 된다는 것이다.
그래서 필자는 버튼을 컨트롤이름으로 생성하고 display를 none으로 설정하여 보이지 않게 처리하였다.
[예제]
<script type="text/javascript">
function test() {
<%= Page.GetPostBackEventReference(btnTest) %>;
}
</script>
<input type="button" onclick="test();" value="test" />
<asp:Button ID="btnTest" runat="server" style="display:none;" onclick="btnTest_Click" />
protected void btnTest_Click(object sender, EventArgs e)
{
......
}
위와 같이 하면 실행 되는것을 볼 수가 있다.
혹시 어떤 값을 전달 해야 한다면 hidden 값을 하나 두고 자바 스크립트에서 히든 값을 수정하고 비하인드 소스에서 그 값을 가져다 쓰면 될 것이다.
728x90
반응형
'.NET > asp.net' 카테고리의 다른 글
특정 페이지 존재 여부 확인 (0) | 2013.05.06 |
---|---|
웹 폰트 적용중 생긴 문제점 (0) | 2011.11.21 |
asp.net 쿠키 생성, 사용, 삭제 (0) | 2011.01.10 |
뒤로 가기 구현 (0) | 2010.11.07 |
TextBox에서 엔터키 이벤트 지정 (0) | 2010.11.07 |
해당 컨트롤에 코드 블록(<% ... %>)이 포함되어 있으므로 Controls 컬렉션을 수정할 수 없습니다. (0) | 2010.11.07 |
CheckBoxList 다중선택 정보 읽어와 체크시 문제 (0) | 2010.11.07 |
asp.net CheckBoxList 다중선택 저장, 읽기 (0) | 2010.11.06 |
asp.net에서 post전송 (0) | 2010.07.09 |