ajax实现DropDownList联动动态下拉(从数据库读值)

前台页面肯定至少有两个DropDownList控件了,在基于.net框架下的ajax,还要加一个scriptmanager控件(必须使用)管理各个ajax控件和jscript文件。两外还有两个实现无刷新页面让dropdownlist联动起来的CascadingDropDown扩展服务器控件(其属性参考www.codeplex.com)。代码很简单,如下:

<body>   
<form id="form1" runat="server">
<asp:scriptmanager id="sm" runat="server"></asp:scriptmanager>        
请选择您company:        
<asp:DropDownList ID="ddlUser"runat="server"></asp:DropDownList>                
<asp:DropDownList ID="ddlCompany" runat="server">
</asp:DropDownList>                
<ajaxToolkit:CascadingDropDown  ID="ccdUser"  TargetControlID="ddlUser"
Category="User"  PromptText="请选择用户"  LoadingText="用户加载中..." ServicePath="CompanyService.asmx" ServiceMethod="GetUser"  runat="server" />                    
<ajaxToolkit:CascadingDropDown  ID="ccdCompany"  TargetControlID="ddlCompany" Category="Company"  PromptText="请选择企业"  LoadingText="企业加载中..." ServicePath="CompanyService.asmx"  ServiceMethod="GetCompany"  ParentControlID="ddlUser" runat="server" />           
</form>
</body>

使用上述ajax服务器端控件请安装ASP.NET AJAX Control Toolkit和ASP.NET 2.0 AJAX Extensions程序集。

并在项目中引用Microsoft.Web.Preview.dll和AjaxControlToolkit.dll。如何使用asp.net ajax请阅读dflying的《ASP.NET AJAX程序设计》,其网址是:http://dflying.cnblogs.com/

本示例来源于其教程的改进,他书上的源代码不是基于数据库的。

后台CompanyService.asmx代码如下:

using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Configuration;
using AjaxControlToolkit;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Data;
using System.Data.SqlClient;
using Microsoft.ApplicationBlocks.Data;
[WebService(Namespace = " http://tempuri.org/ ")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.Web.Script.Services.ScriptService()]
public class CompanyService : System.Web.Services.WebService {    
 string strconn = ConfigurationSettings.AppSettings["connstring"];    
SqlConnection conn;    
 [WebMethod]    
 public CascadingDropDownNameValue[] GetUser(string knownCategoryValues, string category)     {        
List<CascadingDropDownNameValue> userList = new List<CascadingDropDownNameValue>();
conn = new SqlConnection(strconn);        
string SQLstring = "select userId,userRealName from userInfo";        
SqlCommand cmd = new SqlCommand(SQLstring, conn);        
conn.Open();        
SqlDataReader dr = cmd.ExecuteReader();        
while (dr.Read())        
{            
userList.Add(new CascadingDropDownNameValue(dr["userRealName"].ToString(),dr["userId"].ToString()));        
}        
dr.Close();        
conn.Close();        
return userList.ToArray();    
}    
 [WebMethod]    
public CascadingDropDownNameValue[] GetCompany(string knownCategoryValues, string category)     {        
StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
if (kv["User"].ToString() =="")            
return null;        
List<CascadingDropDownNameValue> companyList = new List<CascadingDropDownNameValue>();        
conn = new SqlConnection(strconn);        
string SQLstring = "select companyId,companyName from companyInfo where companyUserId=" + kv["user"].ToString();        
 SqlCommand cmd = new SqlCommand(SQLstring, conn);        
 conn.Open();        
SqlDataReader dr = cmd.ExecuteReader();        
while (dr.Read())        
{            
companyList.Add(new CascadingDropDownNameValue(dr["companyName"].ToString(),dr["companyId"].ToString()));        
}         
return companyList.ToArray();    
}    
}

整个代码基本上与asp.net代码风格一样,比较清晰。运行结果表明,实现了动态的联动而页面没刷新的效果。

另外,实现无刷新联动的方法是把要联动的dropdownlist放在一起做成一个自定义控件,一次性的把数据发送至客户端,然后使用javascript动态响应下拉事件显示数据。此种方法适用于发送至前台数据量较少的情况下,反应速度非常快。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值