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

콜백은 호출시 동작,

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

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

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

^^;;








http://msdn.microsoft.com/ko-kr/library/system.web.ui.icallbackeventhandler(VS.80).aspx

.NET Framework 클래스 라이브러리
ICallbackEventHandler 인터페이스

참고: 이 인터페이스는 .NET Framework 버전 2.0에서 새로 추가되었습니다.

컨트롤이 서버에 대한 콜백 이벤트 대상이 될 수 있음을 나타내는 데 사용됩니다.

네임스페이스: System.Web.UI
어셈블리: System.Web(system.web.dll)

C#
public interface ICallbackEventHandler

콜백 이벤트를 수신해야 하는 사용자 지정 컨트롤에 대해 ICallbackEventHandler 인터페이스를 구현합니다. 자세한 내용은 ASP.NET 웹 페이지에서 다시 게시하지 않는 클라이언트 콜백 구현을 참조하십시오.

ICallbackEventHandler 인터페이스를 구현하는 컨트롤의 예로는 GridView, DetailsViewTreeView 컨트롤이 있습니다. ICallbackEventHandler 인터페이스를 구현하는 컨트롤이 콜백 이벤트의 대상이 되는 경우, RaiseCallbackEvent 메서드가 호출되어 이벤트를 처리하고 이벤트 인수를 매개 변수로 전달하며 GetCallbackResult 메서드는 콜백의 결과를 반환합니다.

콜백을 수행하는 동안 데이터 소스 컨트롤에서 데이터를 검색하는 컨트롤은 이 작업을 동기적으로 또는 비동기적으로 수행할 수 있습니다. GridView, DetailsViewTreeView 같은 ASP.NET 컨트롤은 동기적으로 구현됩니다. 비동기 프로그래밍에 대한 자세한 내용은 비동기 프로그래밍 디자인 패턴을 참조하십시오.

ICallbackEventHandler 인터페이스를 구현하는 컨트롤에 의해 렌더링된 사용자 인터페이스에서 콜백 이벤트가 발생할 경우 이 이벤트의 유효성을 검사할지 여부를 지정할 수 있습니다. 이벤트의 유효성 검사는 보안을 위해 유용한 방법입니다. 그러나 성능상의 이유로 이 기능을 사용하지 않을 수 있습니다. 콜백 이벤트에 대해 이벤트 유효성 검사를 수행할지 여부를 제어하려면 @ Page 지시문의 enableEventValidation 특성이나 Web.config 파일에 있는 pages 요소(ASP.NET 설정 스키마)enableEventValidation 특성을 설정합니다. 코드에서 EnableEventValidation 속성을 설정할 경우 페이지 처리의 Page_Init 단계에서 설정합니다. 이벤트 유효성 검사의 보안 장점과 성능 저하 사이의 관계를 적절하게 조정하는 방법에 대한 자세한 내용은 고성능 ASP.NET 응용 프로그램 개발을 참조하십시오.


이상 엠수디엔 설명..
구구 절절이 길게 어려운 말 투성인데..
아즈악스 의 사돈의 팔촌 처럼..
비동기 기능을 구현 한다는 예기 이더라..
엠수 디엔을 참고 해서 다음 아티클에 간단한 예제들..