CascadingDropDown 是一个扩展 ASP.Net 中的 DropDownList 控件,使其形成级联效果的 ASP.Net AJAX 控件。 当级联中的上一级 DropDownList 的选择值被改变的时候,它会直接影响到其下一级的 DropDownList 中可供用户选择的选项。
CascadingDropDown 完成级联选择项变化的过程是通过发布在 IIS 服务器上的 Web Service 实现的。这个 Web Service 将可以完全地控制其中级联的业务逻辑。
通过这个 Web Service 开发人员可以很方便地从 Xml 或者数据库中获得相关数据。
CascadingDropDown 将会被初始化成如下代码。斜体 属性为可选属性:
<ajaxToolkit:CascadingDropDown ID="CDD1" runat="server"
TargetControlID="DropDownList2"
Category="Model"
PromptText="Please select a model"
LoadingText="[Loading models...]"
ServicePath="CarsService.asmx"
ServiceMethod="GetDropDownContents"
ParentControlID="DropDownList1"
SelectedValue="SomeValue" />
- TargetControlID - 扩展的 DropDownList 控件 ID
- Category - 对应的数据的分类,例如上面例子中的“区域”、“省份”或者“城市”
- PromptText - 在 DropDownList 被选择前提示用户的信息
- PromptValue - 对应提示信息的 Value,这里指的是 DropDownList 中一个 ListItem 中的 Value 值
- EmptyText - 当从 Web Service 中获得数据为空的时候 DropDownList 显示的信息,可选
- EmptyValue - 对应当数据项为空的时候 DropDownList 中显示 EmptyText 的信息的 Value,这里指的是 DropDownList 中一个 ListItem 中的 Value 值,可选
- LoadingText - 当 CascadingDropDown 在和 Web Service 进行数据通信的时候显示的信息
- ServicePath - 对应的获得数据的 Web Service 路径,如果对应的 Web Service 方法为当前页的 Web Service 方法时,需要将其指定为空
- ServiceMethod - 对应的获得 Web Service 方法名,它需要指定为如下的函数签名
示例WebService:
Code
[WebMethod]
public CascadingDropDownNameValue[] GetCountries(string knownCategoryValues, string category)
{
List<CascadingDropDownNameValue> countryList = new List<CascadingDropDownNameValue>();
// 在真实程序中一般从数据库中读取,这里仅仅是模拟
countryList.Add(new CascadingDropDownNameValue("中国", "china"));
countryList.Add(new CascadingDropDownNameValue("其他", "other"));
return countryList.ToArray();
}
[WebMethod]
public CascadingDropDownNameValue[] GetProvincesForCountry(string knownCategoryValues, string category)
{
StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
// 只模拟提供中国的省份
if (kv["Country"] != "china")
return null;
List<CascadingDropDownNameValue> provinceList = new List<CascadingDropDownNameValue>();
provinceList.Add(new CascadingDropDownNameValue("辽宁", "liaoning"));
provinceList.Add(new CascadingDropDownNameValue("上海", "shanghai"));
provinceList.Add(new CascadingDropDownNameValue("北京", "beijing"));
return provinceList.ToArray();
}
[WebMethod]
public CascadingDropDownNameValue[] GetCitiesForProvince(string knownCategoryValues, string category)
{
StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
// 只模拟提供辽宁省内的城市
if (kv["Province"] != "liaoning")
return null;
List<CascadingDropDownNameValue> cityList = new List<CascadingDropDownNameValue>();
cityList.Add(new CascadingDropDownNameValue("沈阳", "shenyang"));
cityList.Add(new CascadingDropDownNameValue("大连", "dalian"));
return cityList.ToArray();
}
注意:
你可以替换上面示例中的方法名称,GetCountries为任何你想要的方法名,但是返回值和参数列表需要保持完全一致。
ContextKey - 一个可用于传入 Web Service 方法的参数,该参数将用于 Web Service 根据客户端的不同操作产生相应的不同的返回结果,当采用 ContextKey 的时候,这个方法的函数签名如下表示:
[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public CascadingDropDownNameValue[] GetDropDownContents(
string knownCategoryValues,
string category, string contextKey) { ... }
注意:
UseContextKey - 指定是否采用 ContextKey,当函数签名采用了带有 ContextKey 的函数签名时,这个属性将被自动设置为 True
ParentControlID - 上一级 DropDownList 控件的 ID,当其没有上一级 DropDownList 的时候,该属性被设置为空,例如上面例子中的 “区域”
SelectedValue - 默认的初始化选中值的 Value,这里指的是 DropDownList 中 ListItem 的 Value 值