共用方式為


用戶端回呼實作 (Visual Basic) 範例

更新:2007 年 11 月

示範實作用戶端回呼的 ASP.NET Web 網頁。如需詳細資訊,請參閱在 ASP.NET 網頁中以程式設計方式實作用戶端回呼但不回傳

範例

說明

下列程式碼範例分成兩個部分。範例的第一個部分顯示 ASP.NET Web 網頁 (.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" >
  <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" >
    <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" ></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 項目 (不是按鈕 Web 伺服器控制項)。當使用者按下按鈕時,按鈕會執行 LookUpStock 函式,以便從清單方塊取得目前的選取範圍,然後呼叫 CallServer 函式執行用戶端回呼。

程式碼後置的網頁會經由 RegisterClientScriptBlock 方法將用戶端指令碼加入網頁。加入網頁的指令碼會包含稱為 CallServer 的函式,以便取得將從 GetCallbackEventReference 方法回傳至伺服器的方法名稱。

用戶端回呼會叫用 (Invoke) RaiseCallbackEvent 方法,可判斷傳遞給這個回呼的產品之現有庫存。GetCallbackResult 方法會傳回此值。請注意在用戶端指令碼和伺服端程式碼之間傳送的引數只能是字串。若要傳入或接收多個值,您可以分別在輸入或傳回字串中串連這些值。

安全性注意事項:

當您使用這個功能時,有潛在的安全性威脅。回呼引數並不會經過驗證,因此應該視為不安全的。在使用前應該永遠檢查引數的內容。如需詳細資訊,請參閱指令碼攻擊概觀

請參閱

工作

HOW TO:在 ASP.NET Web 網頁中實作回呼

概念

在 ASP.NET 網頁中以程式設計方式實作用戶端回呼但不回傳

實作驗證的用戶端回呼範例