ICallbackEventHandler 인터페이스를 상속받아..
디비에 있는 값을 조회하는 간단한 비동기 예제를 작성해 보겠습니다~~ 꺄아~~
1. *.aspx 페위지 에요~~
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test04.aspx.cs" Inherits="_21_CallBackEventReference_Test04" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>CallBackEvent - DB</title>
<script type="text/jscript" language="javascript">
function CallServerData()
{
var inputValue = document.getElementById("txtMcode").value;
CallServer(inputValue, "");
}
function ReceiveServerData(returnValue)
{
document.getElementById("divR").innerHTML = returnValue;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtMcode" runat="server"></asp:TextBox>
<button onclick="CallServerData()">
[js확인]</button>
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">[cs확인]</asp:LinkButton>
<div runat="server" id="divR" style="color:Red;">
</div>
</div>
</form>
</body>
</html>
------------------------------------------------------------------------------------------------------------
1) 텍스트 박스에 아이디를 입력한다 -> 2) 디비에서 중복 확인을 하고 -> 3) div 에 결과를 출력하는 내용입니다.
CallServerData() 함수는 *.cs 에서 등록하는 콜 서버 메서드를 호출 합니다..
중요한건!! 텍스트 박스의 입력 값이 퐈랴미터로 넘어간다는 것입니다~
ReceiveServerData() 함수는 인자로 결과에 해당하는 인가를 가집니다.
그 결과값은 div 에 보여지구요~
------------------------------------------------------------------------------------------------------------
2. *.aspx.cs 페위지 에요~~
------------------------------------------------------------------------------------------------------------
public partial class _21_CallBackEventReference_Test04 : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
{
private string strMcode = "";
protected void Page_Load(object sender, EventArgs e)
{
string strReference = Page.ClientScript.GetCallbackEventReference(
this // 해당 페이지
, "arg" // 클라이언트 -> 서버 인수
, "ReceiveServerData" // 클라이언트 처리 함수
, "context" // 콜벡이 시작되기 전의 클라이언트 스크립트
);
//String.Format ..안된다
string strCallBackScript = "function CallServer(arg, context)" + "{ " + strReference + "} ;";
Page.ClientScript.RegisterClientScriptBlock(
this.GetType()
, "CallServer"
, strCallBackScript
, true);
}
protected void LinkButton1_Click(object sender, EventArgs e)
{
string str = checkUserID(txtMcode.Text);
this.divR.InnerHtml = str;
}
private string checkUserID(string strUserID)
{
string strR = String.Empty;
string strQuery = String.Format("SELECT COUNT(0) FROM dbo.TB_Member WHERE MCODE = '{0}'", strUserID);
int intResult = Convert.ToInt32(Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteScalar(
"server=.;database=..;uid=sa;pwd=sa12wer;", CommandType.Text, strQuery));
if (intResult == 0)
{
strR = strUserID + "->사용가능한 아이디";
}
else
{
strR = strUserID + "->사용사용할수없는 아이디";
}
return strR;
}
#region ICallbackEventHandler 멤버
public string GetCallbackResult()
{
string str = checkUserID(strMcode);
return str;
}
public void RaiseCallbackEvent(string eventArgument)
{
strMcode = eventArgument;
}
#endregion
}
------------------------------------------------------------------------------------------------------------
System.Web.UI.ICallbackEventHandler 인터 페이스를 상속 받습니다..
인터페이를 구현하면..
Callback 과 Result 이벤트를 작성해줍니다..
콜백은 호출시 동작,
리절트를 결과값을 반환 합니다..
그리고 디비처리 메서드..
깔끔하게 동작을 하는군요..
^^;;