使用CascadingDropDown 控件填充列表

Christian Wenz

本文档是Visual Basic 教程(转至 Visual C# 教程

AJAX Control Toolkit 中的 CascadingDropDown 控件扩展了 DropDownList 控件 , 从而当一个 DropDownList 发生变化时可在另一个 DropDownList 中加载相关的值。(例如,一个列表展示美国各州,另一个列表中则填充有所选州的主要城市。)第一个要解决的问题是用这个控件实际填充一个下拉列表。

« 前一篇教程 |  下一篇教程 »

概述

AJAX Control Toolkit 中的CascadingDropDown 控件扩展了DropDownList控件 ,从而当一个DropDownList 发生变化时可在另一个DropDownList 中加载相关的值。(例如,一个列表展示美国各州,另一个列表中则填充有所选州的主要城市。)第一个要解决的问题是用这个控件实际填充一个下拉列表。

步骤

为了激活ASP.NET AJAX 和Control Toolkit 的功能 ,必须将ScriptManager 控件放置于页面中某处 (可放于任何地方 ,但必须在<form> 元素内 ):

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

接着 ,我们需要一个DropDownList 控件 :

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

我们要对这个下拉列表添加一个CascadingDropDown 扩展器。这个扩展器会向一个Web服务发送一个异步请求,该服务于是返回一组 列表项以便显示于列表中。为此,需要设置下列 CascadingDropDown 属性:

  • ServicePath: 传递列表项的 Web 服务的 URL
  • ServiceMethod:传递列表项的 Web 方法
  • TargetControlID: 下拉列表的 ID
  • Category: 调用 Web 方法时提交给该方法的类别信息
  • PromptText: 从服务器异步加载列表数据时显示的文本

下面是CascadingDropDown 元素的标记。C#和VB 代码的唯一不同之处是关联的Web 服务的名称 :

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

源自CascadingDropDown 扩展器的JavaScript 代码用以下签名调用一个Web 服务方法 :

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

重要的是 ,该方法需要返回一个类型为CascadingDropDownNameValue的数组 (在ASP.NET AJAX Control Toolkit 有这个类型的定义 )。在 CascadingDropDownNameValue 构造器中,首先要提供列表项的文本,然后要提供列表项的值,如同HTML中的<option value="VALUE">NAME</option>所为。下面是一个例子 :

<%@ 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

浏览器加载该页面时 ,会触发对列表的填充 ,于是列表含有三个供应商的信息。

列表会自动填充

 

 

下一篇教程