본문 바로가기

.NET/asp.net

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

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
반응형