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 이벤트를 작성해줍니다..

콜백은 호출시 동작,

리절트를 결과값을 반환 합니다..

그리고 디비처리 메서드..

깔끔하게 동작을 하는군요..

^^;;