本文共 7205 字,大约阅读时间需要 24 分钟。
|
图1:使用“ASP.NET AJAX-Enabled Web Site”模板快速创建ATLAS程序 |
图2:ASP.NET AJAX控件工具箱 |
图3:在工程中添加“SQL数据库”模板 |
图4:示例数据库中的两个表格—Cars和CarModels结构定义 |
图5:使用TableAdapter配置向导配置数据集 |
Select CarId,CarName from Cars |
SELECT ModelId,CarId,ModelName FROM CarModels WHERE (CarId = @carId) |
图6:在工程中添加“Web服务”模板 |
using System; using System.Web; using System.Collections; using System.Web.Services; using System.Web.Services.Protocols; using System.Collections.Generic; using AjaxControlToolkit; using System.Data; using System.Data.SqlClient; |
[WebService(Namespace= " ")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.Web.Script.Services.ScriptService] public class CarsService : System.Web.Services.WebService { |
[WebMethod] public CascadingDropDownNameValue[] GetModelsByCarId(string knownCategoryValues, string category) { |
//根据“:”字符使用“;”分隔符分离knownCategoryValues //相应于索引1处的字符串是从dropdownlist中选择的CarId string[] _categoryValues = knownCategoryValues.Split(':', ';'); |
//创建CascadingDropDownNameValue的一个列表以存储汽车模型数据 List_carModels=new List(); |
//创建一个CarModels TableAdapter的实例 dsCarModelsTableAdapters.CarModelsTableAdapter _carModelAdapter = new dsCarModelsTableAdapters.CarModelsTableAdapter(); //对于每一个由方法GetModelsByCarId返回的DataTable中的第一个DataRow //,把modelname和modelid数据添加到List foreach (DataRow _row in _carModelAdapter.GetModelsByCarId(_carID)) { _carModels.Add(new CascadingDropDownNameValue(_row["ModelName"].ToString(), _row["ModelId"].ToString())); } |
// Web方法—根据一个给定的carId取得所有汽车模型信息 //输入参数—层叠式下拉列表框提供的knownCategoryValues //输出参数—CascadingDropDownNameValue数组 [WebMethod] public CascadingDropDownNameValue[] GetModelsByCarId(string knownCategoryValues, string category) { //根据“:”字符使用“;”分隔符分离knownCategoryValues //对于第一个dropdownlist来说,该值为“undefined: id of the // dropdownelement” //相应于索引1处的字符串是从dropdownlist中选择的CarId string[] _categoryValues = knownCategoryValues.Split(':', ';'); //转换string[]中索引1对应元素以便得到CarId int _carID = Convert.ToInt32(_categoryValues[1]); // 创建一个CascadingDropDownNameValue的List结构以便存储汽车模型数据 List _carModels = new List(); //创建一个CarModels TableAdapter的实例 dsCarModelsTableAdapters.CarModelsTableAdapter _carModelAdapter = new dsCarModelsTableAdapters.CarModelsTableAdapter(); //对于每一个由方法GetModelsByCarId返回的DataTable中的第一个datarow //,把modelname和modelid数据添加到List foreach (DataRow _row in _carModelAdapter.GetModelsByCarId(_carID)) { _carModels.Add(new CascadingDropDownNameValue(_row["ModelName"].ToString(), _row["ModelId"].ToString())); } //转换成数组并返回相应的值 return _carModels.ToArray(); } |
< Width="179px" Height="31px" runat="server"> DataTextField="CarName" DataValueField="CarId" DataSourceID="ods_Cars"> Width="181px"> |
< runat="server"> OldValuesParameterFormatString="original_{0}" SelectMethod="GetAllCars" TypeName="dsCarsTableAdapters.CarsTableAdapter"> |
属性 | 内容 | 含义 |
Category | Cars | 相应于knowCategoryValues的分类 |
LoadingText | 请等待…… | 当dropdownlist控件正在加载时显示的消息 |
ParentControlID | ddlCars | 从中选择CategoryId的DropDownList |
PromptText | 请选择一个模型 | 在没有选择内容时的提示文本 |
TargetControlID | ddlCarModels | CascadingDropDownNameValue应该加载到的DropDownList控件 |
ServicePath | CarsService.asmx | 指向web服务的路径 |
ServiceMethod | GetModelsByCarId | 被调用以取得相应值的Web方法 |
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %> |
<> ID="CascadingDropDown1" runat="server" Category="Cars" ParentControlID="ddlCars" TargetControlID="ddlCarModels" ServicePath="CarsService.asmx" ServiceMethod="GetModelsByCarId" LoadingText="请等待……" PromptText="请选择一个模型"> |
图7:示例网站运行结果 |