2012. 3. 21. 10:08

저번에 다른 글에서 숨겨진 컨트롤을 이용한 비하인드 코드를 호출하는 방법을 알려 드렸습니다.
(참고 : [ASP.Net] 자바스크립트에서 비하인드 호출하기)

다른방법으로 스크립트 매니저를 이용한 방법이 있습니다.

1.디자인
텍스트 박스 하나와 html버튼을 하나 추가 해줍니다.
그리고 form의 바로 아래에 '도구 상자 > Ajax 확장'에 있는 스크립트 매니저(Script Manager)를 추가 시켜 줍니다.
스크립트매니저의 'EnablePageMethods'속성을 True로 바꿔줍니다.



<form id="form1" runat="server">
	<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"/>
	<br />
	<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>		
	<input id="Button1" type="button" value="button" onclick='CallMethod();' />
</form>



2.비하인드 코드
비하인드 코드는 스태틱(static)으로 공개된 메소드만 사용할수 있습니다.

[System.Web.Services.WebMethod]
public static string GetDate(string sMsg)
{
	return DateTime.Now.ToString() + " " + sMsg;
}

간단하게 문자열을 받아 날짜와 합쳐 리턴해주는 메소드입니다.

3.자바 스크립트
자바스크립트 에서는 'EnablePageMethods'를 활성화 시키면 사용할수 있는 페이지메소드(PageMethods)를 이용하여 비하인드 메소드를 호출합니다.
이때 리턴받을 자바스크립트 메소드를 미리 지정해주셔야 합니다.

<script type="text/javascript" language="javascript">
    	function CallMethod() 
	{
		//값 가저오기
		var sMsg = document.getElementById('TextBox1').value;

		//비하인드 코드 호출
		PageMethods.GetDate(sMsg, CallSuccess);
    	}

    	function CallSuccess(sReturn) 
	{
		//성공했다!
		alert(sReturn);
    	}
</script>


4.테스트 및 샘플
 


참 잘나옵니다.
이 방법을 사용하면 상당이 깔끔하게 코딩을 할수 있습니다.
하지만 비하인드 코드가 매핑된다는 점과 부분적으로 스태틱메소드를 사용하면 재한사항이 많다는 단점이 있습니다.
뭐...그래도 달일 메소드에 접속할때는 이만한것이 없죠 ㅎㅎㅎ

아래는 샘플입니다.