使用CascadingDropDown 控件填充列表

Christian Wenz

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

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.cs.asmx" ServiceMethod="GetVendors"
     TargetControlID="VendorsList" Category="Vendor" />

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

public CascadingDropDownNameValue[] MethodNameHere(string knownCategoryValues,      string category)

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

public CascadingDropDownNameValue[] MethodNameHere(string knownCategoryValues, 
     string category)

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

<%@ WebService Language="C#" Class="CascadingDropdown0" %>
using System.Web.Script.Services;
using AjaxControlToolkit;
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Collections.Generic;
[ScriptService]
public class CascadingDropdown0 : System.Web.Services.WebService
{
     [WebMethod]
     public CascadingDropDownNameValue[] GetVendors(string knownCategoryValues, 
          string category)
     {
          List<CascadingDropDownNameValue> l = new List<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();
     }
}

列表会自动填充

 

 

下一篇教程