用AjaxPro实现二级联动

简介:
在实际asp.net项目中经常会遇到无刷新二级或者N级(N>=2)联动情况,其实N级联动和二级联动的原理都是一样的,实现这种办法有很多,一种是纯脚本实现(动态生成Array数组),一种 是采用微软的Ajax.net中的UpdatePanel来实现,今天我给大家来展示如何采用AjaxPro来实现,相关文章请参考 http://blog.csdn.net/zhoufoxcn/archive/2008/01/05/2026908.aspx《AjaxPro与服务器端交互过程中如何传值》一文。
前台aspx页面:
<% @ Page Language = " C# "  AutoEventWireup = " true "  CodeFile = " Test.aspx.cs "  Inherits = " Test "   %>

<! DOCTYPE html PUBLIC  " -//W3C//Dtd XHTML 1.0 Transitional//EN "   " http://www.w3.org/tr/xhtml1/Dtd/xhtml1-transitional.dtd " >

< html xmlns = " http://www.w3.org/1999/xhtml "   >
< head runat = " server " >
    
< title > AjaxPro实现二级联动 </ title >
</ head >
< body >
    
< form id = " form1 "  runat = " server " >
    
< div >
        
< table width = " 200 "  border = " 0 "  align = " center "  cellpadding = " 3 "  cellspacing = " 1 "  bordercolor = " #FFFFFF "  style = " border-collapse: collapse " >
                                
< tr align = " center " >
                                  
< td height = " 20 "  colspan = " 2 " >
                                      
< strong > AjaxPro实现二级联动 </ strong >& nbsp; </ td >
                                
</ tr >
                                
< tr  class = " tdbg "   >
                                  
< td width = " 30% " >
                                      省份
</ td >
                                  
< td width = " 70% "  align = " left " >
                                          
< asp:DropDownList ID = " ddlStateList "  runat = " server "  DataTextField = " StateName "  DataValueField = " StateId " >
                                          
</ asp:DropDownList ></ td >
                                
</ tr >
                                
< tr  class = " tdbg "   >
                                  
< td >< strong > 城市 </ strong ></ td >
                                  
< td align = " left " >
                                          
< asp:DropDownList ID = " ddlCityList "  runat = " server " >
                                          
</ asp:DropDownList ></ td >
                                
</ tr >
                              
</ table >
    
    
</ div >
    
< script language = " javascript "  type = " text/javascript "  defer = " defer " >  
    function ShowCity(id)
    {
        var res
= Test.GetCityList(parseInt(id)).value;
        var ddl
= document.getElementById( " <%=ddlCityList.UniqueID %> " );
        ddl.length
= 0 ;
        
if (res)
        {
            
// res是服务器返回的一个List<City>集合
             for (var i = 0 ;i < res.length;i ++ )
            {
                ddl.options.add(
new  Option(res[i].CityName,res[i].CityId));
                
// 从上面可以看出可以直接调用List<City>集合中的元素和它们的属性
            }
        }
    }
</ script >
    
</ form >
</ body >
</ html >
后台.cs代码,注意为了省事,我把两个实体类也一同归并到一个.cs文件中了。
Test.cs
using  System;
using  System.Data;
using  System.Configuration;
using  System.Collections;
using  System.Collections.Generic;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;


/* *
 * 写作说明:本文展示了如何利用AjaxPro与服务器交互,并且还展示了在Js中可以直接调用服务器返回的集合和直接调用服务器上class的属性
 * 作者:周公
 * 日期:2008-1-1
 * 首发地址:
http://blog.csdn.net/zhoufoxcn/
 *
*/
public   partial   class  Test : System.Web.UI.Page
{
    
protected   void  Page_Load( object  sender, EventArgs e)
    {
        
if  ( ! Page.IsPostBack)
        {
            List
< State >  stateList  =   new  List < State > ( 10 );
            stateList.Add(
new  State( 0 " 选择城市 " )); // 默认选项
            stateList.Add( new  State( 1 , " 北京 " ));
            stateList.Add(
new  State( 2 " 天津 " ));
            stateList.Add(
new  State( 3 " 上海 " ));
            stateList.Add(
new  State( 4 " 湖北 " ));
            stateList.Add(
new  State( 5 " 湖南 " ));
            stateList.Add(
new  State( 6 " 山西 " ));
            ddlStateList.DataSource 
=  stateList;
            ddlStateList.DataBind();
            ddlStateList.Attributes[
" onchange " =   " ShowCity(this.options[selectedIndex].value) " ;
        }
        AjaxPro.Utility.RegisterTypeForAjax(
typeof (Test)); // 注册
    }
    [AjaxPro.AjaxMethod]
    
public  List < City >  GetCityList( int  stateId)
    {
        
// 呵呵,都是我熟悉的城市或者区
        List < City >  cityList  =   new  List < City > ( 12 );
        cityList.Add(
new  City( 11 " 海淀区 " 1 ));
        cityList.Add(
new  City( 12 " 朝阳区 " 1 ));
        cityList.Add(
new  City( 13 " 大港区 " 2 ));
        cityList.Add(
new  City( 14 " 南开区 " 2 ));
        cityList.Add(
new  City( 15 " 普陀区 " 3 ));
        cityList.Add(
new  City( 16 " 黄浦区 " 3 ));
        cityList.Add(
new  City( 17 " 黄冈市 " 4 ));
        cityList.Add(
new  City( 18 " 荆州市 " 4 ));
        cityList.Add(
new  City( 19 " 长沙市 " 5 ));
        cityList.Add(
new  City( 20 " 岳阳市 " 5 ));
        cityList.Add(
new  City( 21 " 太原市 " 6 ));
        cityList.Add(
new  City( 22 " 大同市 " 6 ));
        List
< City >  tempList  =   new  List < City > ();
        
for  ( int  i  =   0 ; i  <  cityList.Count; i ++ )
        {
            
if  (cityList[i].StateId  ==  stateId)
            {
                tempList.Add(cityList[i]);
            }
        }
        
return  tempList;
    }
}
///   <summary>
///  省份信息
///   </summary>
public   class  State
{
    
private   int  stateId;
    
private   string  stateName;
    
///   <summary>
    
///  省份名
    
///   </summary>
     public   string  StateName
    {
        
get  {  return  stateName; }
        
set  { stateName  =  value; }
    }
    
    
///   <summary>
    
///  省份编号
    
///   </summary>
     public   int  StateId
    {
        
get  {  return  stateId; }
        
set  { stateId  =  value; }
    }
    
public  State( int  stateId,  string  stateName)
    {
        
this .stateId  =  stateId;
        
this .stateName  =  stateName;
    }
}
///   <summary>
///  城市信息
///   </summary>
public   class  City
{
    
private   int  cityId;
    
private   int  stateId;
    
private   string  cityName;
    
///   <summary>
    
///  城市名称
    
///   </summary>
     public   string  CityName
    {
        
get  {  return  cityName; }
        
set  { cityName  =  value; }
    }
    
    
///   <summary>
    
///  城市所在省份编号
    
///   </summary>
     public   int  StateId
    {
        
get  {  return  stateId; }
        
set  { stateId  =  value; }
    }
    
    
///   <summary>
    
///  城市编号
    
///   </summary>
     public   int  CityId
    {
        
get  {  return  cityId; }
        
set  { cityId  =  value; }
    }

    
public  City( int  cityId,  string  cityName,  int  stateId)
    {
        
this .cityId  =  cityId;
        
this .cityName  =  cityName;
        
this .stateId  =  stateId;
    }
    
}
程序运行效果:
未选择的效果:

具体代码很简单,也做了注释,如果还是不懂,请看我的另一篇文章吧。









本文转自周金桥51CTO博客,原文链接: http://blog.51cto.com/zhoufoxcn/167042 ,如需转载请自行联系原作者
相关文章
|
2天前
|
云安全 人工智能 安全
|
1月前
|
人工智能 自然语言处理 Java
快速带你上手通义灵码 2.0,体验飞一般的感觉
通义灵码个人版为开发者免费提供智能编码能力,专业版限免期内开放更多功能。使用需先注册阿里云账号,支持JetBrains IDEs、Visual Studio Code等开发工具。以Visual Studio Code为例,安装插件并登录后即可体验其强大功能。通义灵码2.0在代码生成、需求理解及单元测试自动化等方面有显著提升,支持多语言和复杂场景,大幅提高开发效率。
234850 33
快速带你上手通义灵码 2.0,体验飞一般的感觉
|
8天前
|
存储 人工智能 监控
一键部署 Dify + MCP Server,高效开发 AI 智能体应用
本文将着重介绍如何通过 SAE 快速搭建 Dify AI 研发平台,依托 Serverless 架构提供全托管、免运维的解决方案,高效开发 AI 智能体应用。
1576 4
|
29天前
|
人工智能 开发工具 C++
利用通义灵码AI在VS Code中快速开发扫雷游戏:Qwen2.5-Max模型的应用实例
本文介绍了如何利用阿里云通义灵码AI程序员的Qwen2.5-Max模型,在VS Code中一键生成扫雷小游戏。通过安装通义灵码插件并配置模型,输入指令即可自动生成包含游戏逻辑与UI设计的Python代码。生成的游戏支持难度选择,运行稳定无Bug。实践表明,AI工具显著提升开发效率,但人机协作仍是未来趋势。建议开发者积极拥抱新技术,同时不断提升自身技能以适应行业发展需求。
22195 17
|
2天前
|
Serverless API
【MCP教程系列】在阿里云百炼,实现超级简单的MCP服务部署
阿里云百炼推出业界首个全生命周期MCP服务,支持一键在线注册托管。企业可将自研或外部MCP服务部署于百炼平台,借助FC函数计算能力,免去资源购买与服务部署的复杂流程,快速实现开发。创建MCP服务仅需四步,平台提供预置服务与自定义部署选项,如通过npx安装代码配置Flomo等服务。还可直接在控制台开通预置服务,体验高效便捷的企业级解决方案。
【MCP教程系列】在阿里云百炼,实现超级简单的MCP服务部署
|
7天前
|
人工智能 Linux iOS开发
7.9K star!免费解锁Cursor Pro功能,这个开源神器太强了!
"无需付费即可畅享AI编程神器Cursor的Pro功能,支持Windows/macOS/Linux全平台!"
477 2
|
6天前
|
人工智能 API 开发工具
MCP圣经:从入门到精通,从精通到放弃,理论 + 实践吃透 大火的 MCP 协议
MCP圣经:从入门到精通,从精通到放弃,理论 + 实践吃透 大火的 MCP 协议
MCP圣经:从入门到精通,从精通到放弃,理论 + 实践吃透 大火的 MCP 协议
|
6天前
2025年阿里云域名备案流程(图文详细教程)
本文详细介绍了2025年阿里云域名备案的全流程,包括注册阿里云账号、企业实名认证、购买服务器、创建域名信息模板、购买域名、域名备案及查询备案号等步骤。通过图文结合的方式,清晰展示了每个环节的操作方法和注意事项,帮助用户顺利完成域名备案。文章强调了域名备案的前提是国内需有一台服务器,并提供了具体配置建议,同时提醒用户注意邮箱验证和短信核验等关键步骤,确保备案顺利通过。
288 6
|
16天前
|
人工智能 运维 安全
函数计算支持热门 MCP Server 一键部署
MCP(Model Context Protocol)自2024年发布以来,逐渐成为AI开发领域的实施标准。OpenAI宣布其Agent SDK支持MCP协议,进一步推动了其普及。然而,本地部署的MCP Server因效率低、扩展性差等问题,难以满足复杂生产需求。云上托管成为趋势,函数计算(FC)作为Serverless算力代表,提供一键托管开源MCP Server的能力,解决传统托管痛点,如成本高、弹性差、扩展复杂等。通过CAP平台,用户可快速部署多种热门MCP Server,体验高效灵活的AI应用开发与交互方式。
845 9