본문 바로가기

Programming/ASP .NET

팝업 띄어서 Yes'No 묻기

딱 아래와 같은 내용을 찾았었다.

출처 : 데브피아
주소 : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=8&MAEULNo=5&no=81&ref=63

//////////////////////////////////////////////////////////////////////////////////
ASP.NET 중에서 큰 부분은 아니지만, 가장 신경쓰이는 부분중의 하나가 client-script과의 연동문제입니다. 그중에서 제일 신경 쓰였던 부분이 메세지 박스에 대한 처리였습니다.
웹에서 저장,삭제 버튼이 클릭된다면, 바로 저장되는 것이 아니라, 사용자에게 메세지박스를 띄어서확인을 해야하는데, 지금부터 그 부분을 다루려고 합니다...
코딩부분은 간단합니다. 저의 경우에는 Btn_Delete라는 "삭제" 버튼을 생성했습니다.

this.Btn_Delete.Attributes.Add("onclick","return confirm("삭제하시겠습니까?");");

코드에서는 버튼의 attribute를 추가시킨 것을 볼 수 있습니다. 첫번째 인수는 onclick이라는 이벤트이고, 두번째 인수는 javascript의 confirm함수입니다.  아~ 그냥 클릭이라는 이벤트에 confirm함수를 연결 시켰나보다... 라고 넘어갈 수도 있지만,  잠시 더 생각해 보면,

<asp:Button id="Btn_Delete" runat="server" onClick="Btn_Delete_Click" />

이렇게 되어있다면, 어떻게 해석이 될까요? 이벤트가 중복선언 된 것일까요?
차이점은 위의것은 client-script이고, Btn_Delete_Click은 server-script임다....
웹 컨트롤이 서버에서 해석되면서, 웹 컨트롤과 서버 스크립은 각각 html,client-script으로 해석됩니다.

그렇다면, 먼저 쓰인(confirm(...)) 스크립과 해석되어진 스크립과의 차이점은 무엇일까요?
먼저 쓰인 것은 사용시 서버와의 라운드 트립을 발생시키지 않습니다. 후자의 경우 Btn_Delete_Click이라는 스크립은 원래 서버스크립이 분석되어 Client-Script이 된 것이기 때문에 반드시 서버와의 round-trip이 발생합니다. 즉, 해석된 코드를 소스보기에서 보면, submit();하는 부분이 항상 있습니다.  

이벤트 발생순서는 확인하는 창이 먼저 뜨고, Yes를 눌렀을 경우에 Btn_Delete_Click 함수가 실행되어 실제 데이터가 삭제됩니다. 사용자가 취소를 누른 경우에는 false가 리턴되어 Server-Script(Btn_Delete_Click)은 실행되지 않습니다.