加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

AjaxToolKit--CascadingDropDown(无刷新级联筛选)的介绍

发布时间:2020-12-17 02:12:17 所属栏目:安全 来源:网络整理
导读:? ? ? 1. ?????? Introduction: Cascading DropDown 是 AjaxToolKit 的一个使用 Web Service 实现级联刷新的控件。当然和传统的 dropdownList 的区别就是不用刷新可以实现级联筛

?

?

?

1.?????? Introduction:

Cascading DropDownAjaxToolKit的一个使用Web Service实现级联刷新的控件。当然和传统的dropdownList的区别就是不用刷新可以实现级联筛选。这个控件使用Web Service从服务器端的xml文件或者是数据库中取数据。

?? cascadingDropDown还有一个功能是可以设置它由哪个cascadingDropDown控件来控制它,也就是它的父级,只有当它的父级发生变化时,它才会变化。所以如果你需要实现一个5级筛选就得用到5cascadingDropDown控件。

?? 在下面我们会提供两个例子分别是从xml取数据和从数据库取数据。微软提供的是从xml文件取数据,后面我们比较详细的介绍一下从数据库取数据的例子。

2.?????? Properties:

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"

  1. TargetControlID: 被控制的dropdownListID.
  2. Category: DropDownList所属分类的名称,其实就是每个dropdown前面显示的那个字符串。
  3. PromptText: dropdownlist未选择数据前显示的字符串,用来提示用户。
  4. EmptyText - 当从 Web Service 中获得数据为空的时候 DropDownList 显示的信息,可选
  5. EmptyValue - 对应当数据项为空的时候 DropDownList 中显示 EmptyText 的信息的 Value,这里指的是 DropDownList 中一个 ListItem 中的 Value 值,可选
  6. LoadingText - CascadingDropDown 在和 Web Service 进行数据通信的时候显示的信息
  7. ServicePath - 对应的获得数据的 Web Service 路径,如果对应的 Web Service 方法为当前页的 Web Service 方法时,需要将其指定为空
  8. ServiceMethod - 对应的获得 Web Service 方法名,它需要指定为如下的函数签名:

[System.Web.Services.WebMethod]

[System.Web.Script.Services.ScriptMethod]

public CascadingDropDownNameValue[]

?GetDropDownContents(

?string knownCategoryValues,

?string category) { ... }

你可以替换上面示例中的方法名称,GetDropDownContents 为任何你想要的方法名,但是返回值和参数列表需要保持完全一致。

  1. ContextKey - 一个可用于传入 Web Service 方法的参数,该参数将用于 Web Service 根据客户端的不同操作产生相应的不同的返回结果,当采用 ContextKey 的时候,这个方法的函数签名如下表示:

[System.Web.Services.WebMethod]

[System.Web.Script.Services.ScriptMethod]

public CascadingDropDownNameValue[]

?? GetDropDownContents(

string knownCategoryValues,string category,

?string contextKey) { ... }

你可以替换上面示例中的方法名称,GetDropDownContents 为任何你想要的方法名,但是返回值和参数列表需要保持完全一致。

  1. UseContextKey - 指定是否采用 ContextKey,当函数签名采用了带有 ContextKey 的函数签名时,这个属性将被自动设置为 True
  2. ParentControlID - 上一级 DropDownList 控件的 ID,当其没有上一级 DropDownList 的时候,该属性被设置为空,例如上面例子中的区域
  3. SelectedValue - 默认的初始化选中值的 Value,这里指的是 DropDownList ListItem Value

3.?????? Example:

首先说明一下,这里提供的例子将会是使用VS2005SQL Server 2005(8)

先看一下微软提供的那个web service提供方法从xml文件取数据的例子。

第一步: 创建一个ajaxtoolkit模板:

?

起个项目名字叫做AjaxControlToolKit_CascadingDropDown_XML

第二步:default.aspx文件中添加一个div用来显示例子的名字。然后拖入一个table,设置为三行两列,第一列显示一个字符串,第二列是dropdownlist

?? 然后从ajax Tool Kit的控件中放入三个CascadingDropDown控件。然后再给页面拖入一个UpdatePanel,在这个Panel种拖入一个Label,IDLabel1,设计页面如下图:

arExtender,属性设置如下:

?

CascadingDropDown控件的属性设置如下:

?

你应该注意到了ServicePath的设定,

你应该注意到了ServicePath的设定,而且有个问题是为什么CascadingDropDwon2没有设置ServicePath???别急,一会再看这个问题。

下一步我们就需要添加CarsService.asmx这个web Service文件,右键项目,然后点击添加新项:

?

选择web Service文件,然后命名为CarsService.asmx。前面说过我们这个例子的web Service方法将会读取xml数据,所以我们还需要在App_Data文件夹下创建一个xml文件名字为CarsService.xml。如下图:

?

Web Service的代码和xml文件的数据在源代码中。这里不很详细的贴出来了。微软提供的读取xml文件的方法相当厉害,你如果还不会XMLDucoment操作和正则表达式,希望你在看这个webService方法前先去学习下这两方面的知识。

Web Service的方法主要是通过对已经读取一个xml文件,然后去设置好三个属性为GetDropdownContent方法提供参数,大致如下所示:

?

另外上面提到的那个问题:为什么cascadingdropdown2为什么没有servicepath??是因为它调用的webservicedefault.aspx文件的代码文件中,default.aspx.cs,

?? [WebMethod]

??? [System.Web.Script.Services.ScriptMethod]

??? public static CascadingDropDownNameValue[] GetDropDownContentsPageMethod(string knownCategoryValues,string category)

??? {

??????? return new CarsService().GetDropDownContents(knownCategoryValues,category);

}

它也是去调用了GetDropDownContents的方法。

?

?

剩下一部分就是如何让label的内容来显示所有dropdownlist的当前选项。通过第三个dropdownlistselectedindxChanged事件来实现。

?

?

上面这里例子如果运行的时候报错,关于安全问题的,需要在<% page里加个东西,你可以在文章最后提供的下载链接里下载下来看加什么。

?

第二个例子是Web Service从数据库取数据来给dropdownlist绑定。

第一步: 创建一个ajaxtoolkit模板:

?

起个项目名字叫做AjaxControlToolKit_CascadingDropDown_DB

第二步:因为使用的是SQL2005(8)还有VS2005(8),所以这里的方式不再是传统的使用sql连接类实现,而是通过下面的方式实现:

  1. 右键App_Data,然后选择添加新项,选择添加SQL Database改名字为SampleData.mdf,然后点击添加。现在你可以通过VS的左侧工具栏去添加两个新表如下图:

????

  1. 创建一个访问Cars表和CarModels表的数据集。

右键点击App_Code,在对话框中选择DataSet,并命名为dsCars,xsd

?

当你创建好这个DataSet的时候,会弹出来一个TableAdaoter Configuration Wizard向导,然后根据提示配置好。

  1. 配置数据集:

先选择SampleData.mdf,然后点击下一步:

?

然后你会被询问到是否需要添加SampleDataConnectionStringWeb.config文件中,选择是,点击下一步:

?

接下来的页面选择选择’Use SQL Statements’点击下一步.,会进入Enter a SQL Statement页面,然后输入下面的sql 查询,点击下一步:

?

然后在’Choose Methods to Generate’页面,反选中Fill a DataTable,并且在Mothed name后面输入GetAllCars.如下图:

?

然后点击保存就创建了一个数据集。

同样的方法创建一个DataSet叫做GetModelsByCarId.截图如下:

?

?

?

第三步是创建一个Web Service,

内容大致如下:

??? //web方法可以通过给出的carId得到所有的model.

??

??? //参数是knownCategoryValues就是上面那个父级的dropdown的当前值的集合

??? // 输出一个字符串数组,即当前的carId下的所有model

??? [WebMethod]

??? public CascadingDropDownNameValue[] GetModelsByCarId(string knownCategoryValues,

??????? string category)

??? {

????? //对于已经第一个dropdownlist,值得形式应该是undefined和下拉列表元素的id.

??? ??// 例如: "undefined: 13;"

??? ??// 也就是说处于index1位置的是我们需要的carId.

??????? string[] _categoryValues = knownCategoryValues.Split(':',';');

??????? // index1得元素转化为整数

??????? int _carID = Convert.ToInt32(_categoryValues[1]);

??????? //创建一个 CascadingDropDownNameValue List来存放CarModels数据。

??????? List<CascadingDropDownNameValue> _carModels = new List<CascadingDropDownNameValue>();

??????? // 创建CarModels TableAdapter的一个实体

??????? dsCarModelsTableAdapters.CarModelsTableAdapter _carModelAdapter = new dsCarModelsTableAdapters.CarModelsTableAdapter();

??????? // 添加modelNameList

??????? foreach (DataRow _row in _carModelAdapter.GetModelsByCarId(_carID))

??????? {

??????????? _carModels.Add(new CascadingDropDownNameValue(_row["ModelName"].ToString(),_row["ModelId"].ToString()));

??????? }

??????? //转化为字符组并返回值

??????? return _carModels.ToArray();

再给出aspx文件:

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

??????? <div>

??????? <%--Dropdown来显示汽车--%>

??????? Car:<asp:DropDownList ID="ddlCars" runat="server" DataSourceID="ods_Cars" DataTextField="CarName" DataValueField="CarId">

??????????? </asp:DropDownList><asp:ObjectDataSource ID="ods_Cars" runat="server" OldValuesParameterFormatString="original_{0}"

??????????? SelectMethod="GetAllCars" TypeName="dsCarsTableAdapters.CarsTableAdapter"></asp:ObjectDataSource>

??????????? <br /><br />

??????? <%--显示被选中的汽车的models--%>

??????? Model:<asp:DropDownList ID="ddlCarModels" runat="server">

??????????? </asp:DropDownList><br /><br />

??????? <%--ASP.NET AJAX CascadingDropDown--%>

??????? <ajaxToolkit:CascadingDropDown ID="CascadingDropDown1" runat="server" Category="Cars" LoadingText="Please wait..." ParentControlID="ddlCars"

???????? PromptText="Select a model" TargetControlID="ddlCarModels" ServicePath="CarsService.asmx" ServiceMethod="GetModelsByCarId" />

??????? </div>

需要注意的是这里已经在设计页面对car进行了数据绑定。注意CascadingDropDown的设置.

?

3.Css Style:

.demoarea {

?????? padding:20px;

?????? background:#FFF url(images/demotop.png) no-repeat left top;

}

?

.demoarea p

{

?????? padding:5px;

}

?

.demoheading {

?????? padding-bottom:20px;

?????? color:#5377A9;

?????? font-family:Arial, Sans-Serif;

?????? font-weight:bold;

?????? font-size:1.5em;

}

?

.demobottom {

?????? height:8px;

?????? background:#FFF url(images/demobottom.png) no-repeat left bottom;

}

?

4.Layout和代码:

http://download.csdn.net/source/1423164

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读