Beispiel für das Implementieren von Clientrückrufen (Visual Basic)
Aktualisiert: November 2007
Zeigt eine ASP.NET-Webseite, die einen Clientrückruf implementiert. Weitere Informationen finden Sie unter Programmgesteuertes Implementieren von Clientrückrufen ohne Postbacks in ASP.NET-Webseiten.
Beispiel
Beschreibung
Das folgende Codebeispiel besteht aus zwei Teilen. Der erste Teil des Beispiels zeigt eine ASP.NET-Webseite (die ASPX-Seite). Der zweite Teil zeigt die entsprechende Code-Behind-Datei (die ASPX.VB-Datei).
Code
<%@ 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
Kommentare
Die Webseite emuliert eine Datenbanksuche, um für einige Produkte (Monitore, Tastaturen usw.) die Anzahl der verfügbaren oder vorrätigen Artikel zu bestimmen. Um das Codebeispiel zu vereinfachen, wird die Datenbank als Wörterbuchliste dargestellt, die nur einige wenige Elemente enthält. Für jeden Artikel in der Tabelle ist der Artikelname der Schlüssel (z. B. Monitor), und der Wert beschreibt die Anzahl der vorrätigen Artikel. In einer Produktionsanwendung würde stattdessen eine Datenbank verwendet werden.
Beim Ausführen der Seite wird ein ListBox-Steuerelement an die Hashtabelle gebunden, damit das ListBox-Steuerelement die Produktliste anzeigen kann. Die Seite enthält außerdem ein button-Element (kein Button-Webserversteuerelement), dessen onclick-Ereignis an eine Clientfunktion mit dem Namen LookUpStock gebunden ist. Wenn der Benutzer auf diese Schaltfläche klickt, wird über die Schaltfläche die LookUpStock-Funktion ausgeführt, um die aktuelle Auswahl des Listenfelds abzurufen. Anschließend wird ein Clientrückruf ausgeführt, indem die CallServer-Funktion aufgerufen wird.
Die Code-Behind-Seite fügt der Seite über die RegisterClientScriptBlock-Methode Clientskript hinzu. Das hinzugefügte Skript enthält die CallServer-Funktion, die von der GetCallbackEventReference-Methode den Namen der Methode abruft, die das Postback an den Server durchführt.
Der Clientrückruf ruft die RaiseCallbackEvent-Methode auf, die den verfügbaren Bestand für den an sie übergebenen Artikel ermittelt. Die GetCallbackResult-Methode gibt den Wert zurück. Beachten Sie, dass es sich bei den Argumenten, die zwischen Clientskript und Servercode hin und her gesendet werden, nur um Zeichenfolgen handeln darf. Sie können mehrere Werte gleichzeitig eingeben oder empfangen, wenn Sie in der Eingabezeichenfolge bzw. in der Ausgabezeichenfolge Werte verknüpfen.
Sicherheitshinweis: |
---|
Bei der Verwendung dieses Features gibt es u. U. Sicherheitsrisiken. Rückrufargumente werden nicht validiert und sind deshalb als unsicher zu werten. Sie sollten keine Argumente verwenden, ohne vorher deren Inhalt zu prüfen. Einzelheiten finden Sie unter Übersicht über Skriptangriffe. |
Siehe auch
Aufgaben
Gewusst wie: Implementieren von Rückrufen in ASP.NET-Webseiten
Konzepte
Programmgesteuertes Implementieren von Clientrückrufen ohne Postbacks in ASP.NET-Webseiten
Clientrückruf und Beispiel für die Implementierung einer Validierung