Freigeben über


Ausfüllen einer Liste mit CascadingDropDown (VB)

von Christian Wenz

PDF herunterladen

Das CascadingDropDown-Steuerelement im AJAX Control Toolkit erweitert ein DropDownList-Steuerelement, sodass Änderungen in einer DropDownList zugeordnete Werte in einer anderen DropDownList laden. (Für instance enthält eine Liste eine Liste der US-Bundesstaaten, und die nächste Liste wird dann mit den wichtigsten Städten in diesem Bundesstaat gefüllt.) Die erste Zu lösende Herausforderung besteht darin, mithilfe dieses Steuerelements tatsächlich eine Dropdownliste zu füllen.

Überblick

Das CascadingDropDown-Steuerelement im AJAX Control Toolkit erweitert ein DropDownList-Steuerelement, sodass Änderungen in einer DropDownList zugeordnete Werte in einer anderen DropDownList laden. (Für instance enthält eine Liste eine Liste der US-Bundesstaaten, und die nächste Liste wird dann mit den wichtigsten Städten in diesem Bundesstaat gefüllt.) Die erste Zu lösende Herausforderung besteht darin, mithilfe dieses Steuerelements tatsächlich eine Dropdownliste zu füllen.

Schritte

Um die Funktionalität von ASP.NET AJAX und des Control Toolkits zu aktivieren, muss das ScriptManager Steuerelement an einer beliebigen Stelle auf der Seite platziert werden (aber innerhalb des <form> Elements):

<asp:ScriptManager ID="asm" runat="server" />

Anschließend ist ein DropDownList-Steuerelement erforderlich:

<div>
 Vendor: <asp:DropDownList ID="VendorsList" runat="server" />
</div>

Für diese Liste wird ein CascadingDropDown-Extender hinzugefügt. Es sendet eine asynchrone Anforderung an einen Webdienst, die dann eine Liste der Einträge zurückgibt, die in der Liste angezeigt werden sollen. Damit dies funktioniert, müssen die folgenden CascadingDropDown-Attribute festgelegt werden:

  • ServicePath: URL eines Webdiensts, der die Listeneinträge liefert
  • ServiceMethod: Webmethode, die die Listeneinträge liefert
  • TargetControlID: ID der Dropdownliste
  • Category: Kategorieinformationen, die beim Aufruf an die Webmethode übermittelt werden
  • PromptText: Text, der beim asynchronen Laden von Listendaten vom Server angezeigt wird

Hier sehen Sie das Markup für das CascadingDropDown -Element. Der einzige Unterschied zwischen C# und VB ist der Name des zugeordneten Webdiensts:

<ajaxToolkit:CascadingDropDown ID="ccd1" runat="server"
 ServicePath="CascadingDropdown0.vb.asmx" ServiceMethod="GetVendors"
 TargetControlID="VendorsList" Category="Vendor" />

Der JavaScript-Code, der CascadingDropDown vom Extender stammt, ruft eine Webdienstmethode mit der folgenden Signatur auf:

Public Function MethodNameHere(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue()

Der wichtige Aspekt ist also, dass die Methode ein Array vom Typ CascadingDropDownNameValue zurückgeben muss (definiert durch das ASP.NET AJAX Control Toolkit). CascadingDropDownNameValue Im Konstruktor müssen zuerst der Text des Listeneintrags und dann dessen Wert angegeben werden, genau wie <option value="VALUE">NAME</option> in HTML. Hier finden Sie einige Beispieldaten:

<%@ WebService Language="VB" Class="CascadingDropDown0" %>
Imports System.Web.Script.Services
Imports AjaxControlToolkit
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Collections.Generic
<ScriptService()> _
Public Class CascadingDropDown0
 Inherits System.Web.Services.WebService
 <WebMethod()> _
 Public Function GetVendors(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue()
 Dim l As New List(Of CascadingDropDownNameValue)
 l.Add(New CascadingDropDownNameValue("International", "1"))
 l.Add(New CascadingDropDownNameValue("Electronic Bike Repairs & Supplies","2"))
 l.Add(New CascadingDropDownNameValue("Premier Sport, Inc.", "3"))
 Return l.ToArray()
 End Function
End Class

Durch das Laden der Seite im Browser wird die Liste mit drei Anbietern gefüllt.

Die Liste wird automatisch ausgefüllt.

Die Liste wird automatisch ausgefüllt (Klicken Sie hier, um das Bild in voller Größe anzuzeigen).