共用方式為


用戶端回呼實作 (C#) 範例

更新:2007 年 11 月

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

範例

說明

下列程式碼範例分成兩個部分。範例的第一個部分顯示 ASP.NET Web 網頁 (.aspx 網頁)。第二個部分顯示對應的程式碼後置的檔案 (.aspx.cs 檔)。

程式碼

<%@ Page Language="C#" AutoEventWireup="true" 
  CodeFile="ClientCallback.aspx.cs" 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/ecmascript">
    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>
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class ClientCallback : System.Web.UI.Page,
     System.Web.UI.ICallbackEventHandler
{
    protected System.Collections.Specialized.ListDictionary catalog;
    protected String returnValue;
    protected void Page_Load(object sender, EventArgs e)
    {
        String cbReference =
            Page.ClientScript.GetCallbackEventReference(this,
            "arg", "ReceiveServerData", "context");
        String callbackScript;
        callbackScript = "function CallServer(arg, context)" +
            "{ " + cbReference + ";}";
        Page.ClientScript.RegisterClientScriptBlock(this.GetType(),
            "CallServer", callbackScript, true);

        catalog = new System.Collections.Specialized.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();

    }

    public void RaiseCallbackEvent(String eventArgument)
    {
        if (catalog[eventArgument] == null)
        {
            returnValue = "-1";
        }
        else
        {
            returnValue = catalog[eventArgument].ToString();
        }
    }
    public String GetCallbackResult()
    {
        return returnValue;
    }
}

註解

網頁模擬資料庫查閱以判斷可用或在庫存中的產品系列項目數量 (螢幕、鍵盤等)。為了簡化這個程式碼範例,資料庫是用包含小型項目組合的字典清單來表示。針對資料表中的每個項目,索引鍵是項目名稱 (例如螢幕) 並且值是在庫存中的項目數量。在實際執行應用程式中就會使用資料庫。

當執行網頁時,ListBox 控制項會繫結至雜湊資料表,讓 ListBox 控制項顯示產品清單。網頁還包含 button 項目 (非 Button Web 伺服器控制項),其 onclick 事件是繫結至名為 LookUpStock 的用戶端函式。當使用者按下按鈕時,按鈕會執行 LookUpStock 函式,以便從清單方塊取得目前的選取範圍,然後呼叫 CallServer 函式執行用戶端回呼。

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

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

安全性注意事項:

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

請參閱

工作

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

概念

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

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