클라이언트 콜백 구현 예제(Visual Basic)

Visual Studio 2010

업데이트: 2007년 11월

클라이언트 콜백을 구현하는 ASP.NET 웹 페이지를 보여 줍니다. 자세한 내용은 ASP.NET 웹 페이지에서 다시 게시하지 않는 클라이언트 콜백을 프로그래밍 방식으로 구현을 참조하십시오.

설명

다음 코드 예제는 두 부분으로 구성되어 있습니다. 예제의 첫 번째 부분에서는 ASP.NET 웹 페이지(.aspx 페이지)를 보여 주고 두 번째 부분에서는 해당하는 코드 숨김 파일(.aspx.vb 파일)을 보여 줍니다.

코드

<%@ Page Language="VB" AutoEventWireup="true" 
  CodeFile="ClientCallback.aspx.vb" Inherits="ClientCallback" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
  <title>Client Callback Example</title>
  <script type="text/javascript">
    function LookUpStock()
    {
        var lb = document.getElementById("ListBox1");
        var product = lb.options[lb.selectedIndex].text;
        CallServer(product, "");
    }

    function ReceiveServerData(rValue)
    {   
        document.getElementById("ResultsSpan").innerHTML = rValue;        
    }
</script>
</head>
<body>
  <form id="form1" runat="server">
    <div>
      <asp:ListBox ID="ListBox1" Runat="server"></asp:ListBox>
      <br />
      <br />
      <button type="Button" onclick="LookUpStock()">Look Up Stock</button>
      <br />
      <br />
      Items in stock: <span id="ResultsSpan" runat="server"></span>
      <br />
    </div>
  </form>
</body>
</html>


Partial Class ClientCallback
    Inherits System.Web.UI.Page
    Implements System.Web.UI.ICallbackEventHandler

    Protected catalog As ListDictionary
    Protected returnValue As String
    Sub Page_Load(ByVal sender As Object, ByVal e As _
        System.EventArgs) Handles Me.Load
        Dim cbReference As String
        cbReference = Page.ClientScript.GetCallbackEventReference(Me, _
            "arg", "ReceiveServerData", "context")
        Dim callbackScript As String = ""
        callbackScript &= "function CallServer(arg, context) { " & _
            cbReference & "} ;"
        Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), _
            "CallServer", callbackScript, True)

        ' Populate List Dictionary with invented database data
        catalog = New ListDictionary()
        catalog.Add("monitor", 12)
        catalog.Add("laptop", 10)
        catalog.Add("keyboard", 23)
        catalog.Add("mouse", 17)

        ListBox1.DataSource = catalog
        ListBox1.DataTextField = "key"
        ListBox1.DataBind()
    End Sub

    Public Sub RaiseCallbackEvent(ByVal eventArgument As String) _
    Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent

        If catalog(eventArgument) Is Nothing Then
            returnValue = "-1"
        Else
            returnValue = catalog(eventArgument).ToString()
        End If

    End Sub

    Public Function GetCallbackResult() _
    As String Implements _
    System.Web.UI.ICallbackEventHandler.GetCallbackResult

        Return returnValue

    End Function

End Class


설명

이 웹 페이지에서는 모니터와 키보드 등 일련의 제품에 대해 현재 재고가 있는 항목의 수를 확인하기 위해 데이터베이스 조회를 에뮬레이트합니다. 코드 예제를 간소화하기 위해 소규모의 항목 집합이 포함된 사전 목록이 데이터베이스로 사용됩니다. 테이블의 각 항목에 대해 키는 항목 이름(예: 모니터)이고 값은 재고가 있는 항목의 수입니다. 프로덕션 응용 프로그램에서는 데이터베이스가 대신 사용됩니다.

페이지가 실행되면 ListBox 컨트롤에 제품 목록이 표시되도록 ListBox 컨트롤이 해시 테이블에 바인딩됩니다. 또한 onclick 이벤트가 LookUpStock이라는 클라이언트 함수에 바인딩되어 있는 button 요소(단추 웹 서버 컨트롤 아님)도 페이지에 포함되어 있습니다. 사용자가 단추를 클릭하면 LookUpStock 함수가 실행됩니다. 이 함수는 목록 상자에서 현재 선택 항목을 가져온 다음, CallServer 함수를 호출하여 클라이언트 콜백을 수행합니다.

코드 숨김 페이지는 RegisterClientScriptBlock 메서드를 통해 클라이언트측 스크립트를 페이지에 추가합니다. 페이지에 추가되는 스크립트에는 CallServer라는 함수가 포함되어 있으며 이 함수는 GetCallbackEventReference 메서드에서 서버에 다시 게시할 메서드의 이름을 가져옵니다.

클라이언트 콜백은 전달된 제품의 재고를 확인하는 RaiseCallbackEvent 메서드를 호출합니다. GetCallbackResult 메서드는 값을 반환합니다. 이때 클라이언트 스크립트와 서버 코드 간에 전달되는 인수는 문자열만 가능합니다. 여러 값을 전달하거나 받으려면 입력 문자열이나 반환 문자열에 각각 값을 연결합니다.

ms178209.alert_security(ko-kr,VS.100).gif보안 정보:

이 기능을 사용하면 보안 문제가 발생할 수 있습니다. 콜백 인수는 유효성이 검사되지 않으므로 안전하지 않은 것으로 간주해야 합니다. 인수를 사용하기 전에 항상 인수 내용을 검사해야 합니다. 자세한 내용은 스크립트 악용 개요를 참조하십시오.

표시: