개발

[.net] 자바스크립트에서 asp.net 비하인드 코드 실행하기

지승준 2014. 6. 10. 12:09

이번 프로젝트를 진행을 하다가 asp.net 의 cs 쪽에서 InnerHTML 를 이용하여 html 태그를 생성하여야 되게 되었다. 생성한 태그에 button 컨트롤이 들어 있는데 버튼 생성을 하는 것은 쉽게 되었다. 하지만 아무리 시도를 해봐도 서버쪽 이벤트가 발생하지 않았다.


그렇게 몇시간을 해매다가 검색한 글 중 보이는게 InnerHTML로 생성한 버튼에 runat="server"는 그냥 텍스트로써 역할만 할 뿐 서버 컨트롤이 될 수 없다는것. 한동안 멍하니 모니터만 쳐다 보았다.


멍하니 앉아 있을수 만은 없는법!! 열심히 방법을 찾던 중 자바스크립트를 이용하여 asp.net 비하인드 코드 메소드를 발생시킬 수 있다는 글을 발견하여 시도해 보았다. 음 필자가 제대로 습득하지 못한 이유로 몇시간을 해매었다. ㅠ


그렇게 해매며 시도한지 몇시간 후...새롭게 시도를 해보니 실행이 되는것...허얼 ㅠ 내 아까운 시간들 ㅠ


이제 자바스크립트에서 asp.net 의 비하인드 코드의 메소드를 실행시키는 것을 알아보도록 하겠다.


의외로 간단하고 이해하기도 쉽다.


우선 자바스크립트에서 비하인드 코드 메소드를 실행할 때 방법은 이렇다


1
__doPostBack(컨트롤이름,'');
cs


위와 같은 방법으로 실행이 가능하다. 하지만 .net에서 자동 생성하는 부분이어서 개발자가 별도로 작성하여도 자동으로 바뀔 가능성이 있다. 또한 .net에서 자동으로 생성하지 않는 경우도 발생할 수 있다고 한다. 그래서 위 방법을 사용 하기 보다는 아래의 방법으로 하기를 바란다.


1
<%= Page.GetPostBackEventReference(컨트롤이름) %>
cs


위 코드를 사용하면 자동으로 __doPostBack()을 생성하여 준다.


여기서 주의 할 점이라면 컨트롤이름을 가진 실제 컨트롤이 존재 해야 된다는 것이다.


그래서 필자는 버튼을 컨트롤이름으로 생성하고 display를 none으로 설정하여 보이지 않게 처리하였다.


[예제]

1
2
3
4
5
6
7
8
9
10
11
12
<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)
{
    ......
}
cs


위와 같이 하면 실행 되는것을 볼 수가 있다.


혹시 어떤 값을 전달 해야 한다면 hidden 값을 하나 두고 자바 스크립트에서 히든 값을 수정하고 비하인드 소스에서 그 값을 가져다 쓰면 될 것이다.

'개발' 카테고리의 다른 글

[jquery] 특정 엘레멘트 위치까지 스크롤 자동 이동  (0) 2014.06.10
[javascript] 팝업  (0) 2014.06.10
[javascript] ckeditor 에디터  (0) 2014.06.05
[javascript] 기간종료  (0) 2014.06.05
[.net] 기간종료, 이벤트 종료  (0) 2014.06.05