CascadingDropDown を使用して一覧に入力する (C#)

作成者: Christian Wenz

PDF のダウンロード

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)

そのため、重要な点は、メソッドが (ASP.NET AJAX Control Toolkit で定義されている) CascadingDropDownNameValue 型の配列を返す必要があるということです。 CascadingDropDownNameValue コンストラクターでは、<option value="VALUE">NAME</option> が HTML で行うのと同じように、最初に一覧のエントリのテキスト、次にその値を提供する必要があります。 サンプル データを次に示します。

<%@ 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();
 }
}

ブラウザーでページを読み込むと、一覧への 3 つのベンダーの設定がトリガーされます。

The list is filled automatically

一覧が自動的に設定されます (クリックすると全画面の画像が表示されます)