`
yfdong21
  • 浏览: 61879 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ASP.NET MVC + Jquery 实现Ajax下拉框数据三级联动

阅读更多

这是第一使用Jquery实现城市三级数据联动的实例!之前本人没有使用过Jquery,在WebForm的开发过程中,很多时候用的是ASP.NET Ajax,ajaxPro +JavaScript,从未使用过JS框架,最近在学习ASP.NET MVC,在最新的发布版本中,已经集成了Jquery 1.3.1,自然,也要学一学!发现使用Jquery代码果然写得比原始JS优雅!只是语法和方法太多,现在还没弄熟,还需要时间来学习.....这次是第一次使用Jquery写客户端脚本,如果大家发现更好的实现方法,请给我留言!谢谢!

注明:ASP.NET MVC 1.0 ,作者:0x001;

View :

<script type="text/javascript">
    $(document).ready(function() {
        GetByJquery();
        $("#ddlProvince").change(function() { GetCity() });
        $("#ddlCity").change(function() { GetDistrict() });
    });
   
    function GetByJquery() {

        $("#ddlProvince").empty(); //清空省份SELECT控件

        $.getJSON("/ajax/GetProvinceList", function(data) {
            $.each(data, function(i, item) {
                $("<option></option>")
                    .val(item["ProvinceID"])
                    .text(item["ProvinceName"])
                    .appendTo($("#ddlProvince"));
            });
            GetCity();
        });     

    }

    function GetCity() {

        $("#ddlCity").empty(); //清空城市SELECT控件
        var url ="/ajax/GetCityList/" + $("#ddlProvince").val();
        $.getJSON(url, function(data) {
            $.each(data, function(i, item) {
                $("<option></option>")
                    .val(item["CityID"])
                    .text(item["CityName"])
                    .appendTo($("#ddlCity"));
            });
            GetDistrict();
        });
    }

    function GetDistrict() {
        $("#ddlDistrict").empty(); //清空市区SELECT控件
        var url = "/ajax/GetDistrictList/" + $("#ddlCity").val();
       
        $.getJSON(url, function(data) {
            $.each(data, function(i, item) {
                $("<option></option>")
                    .val(item["DistrictID"])
                    .text(item["DistrictName"])
                    .appendTo($("#ddlDistrict"));
            });
        });
    }

</script>
<table><tr><td><select id="ddlProvince"/></td><td><select id="ddlCity"/></td><td><select id="ddlDistrict" /></td></tr></table>

Controller :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;

namespace MvcBBS.Controllers
{
    public class AjaxController : Controller
    {
        //
        // GET: /Ajax/

        /// <summary>
        /// 获取所有[省份]数据
        /// </summary>
        public ActionResult GetProvinceList()
        {
            if (!Request.IsAjaxRequest())
            {
                return Content("请不要非法方法,这是不道德的行为!");
            }

            BLL.Province bll = new MvcBBS.BLL.Province();
            List<MvcBBS.Model.S_Province> modellist = bll.GetProvinceList();

            return Json(modellist);
        }

        /// <summary>
        /// 获取某[省份]的所有[城市]数据
        /// </summary>
        public ActionResult GetCityList(int id)
        {
            if (!Request.IsAjaxRequest())
            {
                return Content("请不要非法方法,这是不道德的行为!");
            }
            BLL.Province bll = new MvcBBS.BLL.Province();
            List<MvcBBS.Model.S_City> modellist = bll.GetCityList(id);
            return Json(modellist);
        }

        /// <summary>
        /// 获取某[城市]的所有[市区]数据
        /// </summary>
        public ActionResult GetDistrictList(int id)
        {
            if (!Request.IsAjaxRequest())
            {
                return Content("请不要非法方法,这是不道德的行为!");
            }

            BLL.Province bll = new MvcBBS.BLL.Province();
            List<MvcBBS.Model.S_District> modellist = bll.GetDistrict(id);

            return Json(modellist);
        }

    }
}

我比较喜欢使用三层+工厂模式来读写数据,O/R Mapping不太适合我的要求!我们写的项目经常不是为了方便移植,而是选择明确的数据库,需要更高的性能,更强的业务逻辑!大家看到上面的代码,应该很熟悉,从数据库读数据到List<>中返回,并使有ASP.NET MVC内置的Json方法转换数据并Response.

DAL :    

// BLL,Model就不贴出来了!

using System;
using System.Data;
using System.Text;
using System.Data.SqlClient;
using System.Collections.Generic;
using DBUtility;//请先添加引用

namespace MvcBBS.DAL
{
    public class Province
    {
        public Province()
        {}

        /// <summary>
        /// 获取所有省份数据
        /// </summary>
        /// <returns></returns>
        public List<Model.S_Province> GetProvinceList()
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("SELECT ProvinceID,ProvinceName ");
            strSql.Append(" FROM S_Province ");
            List<Model.S_Province> modelList = new List<MvcBBS.Model.S_Province>();
            SqlDataReader dr = DbHelperSQL.ExecuteReader(strSql.ToString());           
            while (dr.Read())
            {
                 Model.S_Province _model = new MvcBBS.Model.S_Province();
                 _model.ProvinceID = int.Parse(dr["ProvinceID"].ToString());
                 _model.ProvinceName = dr.GetString(1);
                modelList.Add(_model);
            }
            dr.Close();
            return modelList;
        }

        /// <summary>
        /// 获取某省份的所有城市数据
        /// </summary>
        /// <param name="ProvinceID"></param>
        /// <returns></returns>
        public List<Model.S_City> GetCityList(int ProvinceID)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("SELECT CityID,CityName,ZipCode");
            strSql.Append(" FROM S_City ");
            strSql.Append(" WHERE ProvinceID=");
            strSql.Append(ProvinceID.ToString());

            List<Model.S_City> modelList = new List<MvcBBS.Model.S_City>();
            SqlDataReader dr = DbHelperSQL.ExecuteReader(strSql.ToString());
            while (dr.Read())
            {
                Model.S_City _model = new MvcBBS.Model.S_City();
                _model.CityID = int.Parse(dr["CityID"].ToString());
                _model.CityName = dr.GetString(1);
                _model.ZipCode = dr.GetString(2);
                _model.ProvinceID = ProvinceID;
                modelList.Add(_model);
            }
            dr.Close();
            return modelList;
        }

        /// <summary>
        /// 获取某城市的所有市区
        /// </summary>
        /// <param name="CityID"></param>
        /// <returns></returns>
        public List<Model.S_District> GetDistrict(int CityID)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("SELECT DistrictID,DistrictName");
            strSql.Append(" FROM S_District ");
            strSql.Append(" WHERE CityID=");
            strSql.Append(CityID.ToString());

            List<Model.S_District> modelList = new List<MvcBBS.Model.S_District>();
            SqlDataReader dr = DbHelperSQL.ExecuteReader(strSql.ToString());
            while (dr.Read())
            {
                Model.S_District _model = new MvcBBS.Model.S_District();
                _model.DistrictID = int.Parse(dr["DistrictID"].ToString());
                _model.DistrictName = dr.GetString(1);
                _model.CityID = CityID;
                modelList.Add(_model);
            }
            dr.Close();
            return modelList;
        }
    }
}

转载请注明: 0x001.com ,谢谢!大家多多提点建议!本人需要学习和改进的动力!

 

分享到:
评论

相关推荐

    mvc3二级联动下拉框

    5. Ajax:ASP.NET MVC支持Ajax操作,使用Ajax.BeginForm或jQuery的$.ajax方法,可以实现无刷新更新页面部分内容,这对于二级联动下拉框的实时更新至关重要。 6. 数据绑定:在ASP.NET MVC中,可以使用MVVM(Model-...

    asp.net无限级联动

    在本案例中,我们将探讨如何使用ASP.NET和jQuery实现无限级联动,并通过DOM操作和AJAX请求来获取并展示数据。 首先,我们需要理解ASP.NET的角色。ASP.NET是微软提供的一个用于构建Web应用程序的框架,它包含一系列...

    asp.net 省市联动 省市齐全

    本资源"asp.net 省市联动 省市齐全"是针对这一功能的实现,包含了完整的省市区县数据,以及对应的ASP.NET代码实现。 首先,省市联动的核心在于数据结构的设计。通常我们会使用多级嵌套的字典或者自定义类来存储中国...

    mvc实现三级联动菜单例子(带数据库添加即可)

    在本文中,我们将深入探讨如何在ASP.NET MVC框架中利用LINQ to Entity技术实现三级联动菜单,这是一个常见的功能,常用于构建多级选择的交互式界面,如地区选择、产品分类等。首先,我们需要理解MVC(Model-View-...

    省市三级联动+JQuery

    总之,省市三级联动是通过JQuery结合Ajax实现的,利用事件监听器和异步请求动态更新下拉选项,提供流畅的用户交互体验。在这个实例中,当用户选择省份时,会自动加载对应的城市列表,接着选择城市后,会加载对应的...

    ASP.NET源码——[整站程序]嘟嘟狗网上家园Ajax系统.zip

    在这个嘟嘟狗网上家园项目中,Ajax很可能被用来创建动态的用户界面,例如无刷新的表单提交、实时的数据更新或者下拉框联动效果等。这不仅减少了页面加载时间,还提高了用户与网站的互动性。 ASP.NET Web Forms是ASP...

    省市区三级联动数据库Mssql

    标题中的“省市区三级联动数据库Mssql”指的是在SQL Server(Mssql)中设计和实现的一个数据结构,用于支持中国省级、市级和区级行政区划的三级联动效果。这种联动通常应用于网页表单中,用户在选择省份时,下拉菜单...

    .net无刷新三级地区,地区三级联效果

    总结起来,实现.NET无刷新三级地区联动的关键在于结合.NET的服务器端控件和AJAX技术,以及有效的前后端数据交互。通过这样的设计,用户可以在不刷新整个页面的情况下,流畅地选择所需的省份、城市和区县,提高网站的...

    自定义级别联动 .net

    在.NET开发中,"自定义级别联动"通常指的是在用户界面UI中实现多个下拉框或选择器之间的联动效果,这种效果常见于处理层级关系的数据,例如省份-城市-区县的三级选择。这种功能在网页应用、管理后台或者数据分析系统...

    最简单的下拉框联动不刷新页面示例

    在本示例中,“最简单的下拉框联动不刷新页面”是通过AJAX技术实现的。 AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器交换数据并...

    .NET版的省市区级联

    这里以ASP.NET MVC为例,我们可以使用jQuery和AJAX来实现前端的动态加载,后端则通过控制器处理AJAX请求并返回相关数据。 1. 前端HTML和JavaScript: - 创建HTML元素,如`&lt;select&gt;`,用于展示级联选择。 - 使用...

    .NET省市联动

    5. **数据绑定**:在ASP.NET MVC中,可以使用ViewBag或ViewData来传递初始省份数据,通过 Razor 模板语法绑定到视图中的下拉框。而在ASP.NET Web Forms中,可能需要使用控件的`DataSource`属性和`DataBind()`方法来...

    与后台结合的使用jquery实现的联动选择框

    描述中的`getorganize.do`文件是一个返回数据的示例,通常这是一个服务器端的接口,可能是Java的Servlet、Spring MVC、ASP.NET或PHP等后端技术实现的。这个接口的职责是接收前端发送的请求,查询相应的数据,然后以...

    省市县三级联动

    3. 后端接口:提供API接口,根据前端请求的父级ID返回相应的子级数据,可以使用ASP.NET Web API或ASP.NET Core MVC来实现。 4. 数据绑定:将从后端获取的数据显示到前端下拉框,确保选中一个选项后,关联的下拉框能...

    ajax_city_.rar_city

    【标题】"ajax_city_.rar_city" 涉及的核心技术是 AJAX(Asynchronous JavaScript and XML)和 .NET 编程框架,主要实现的是网页上的省市县三级联动效果。在这个项目中,用户在选择省份时,城市会自动更新;接着在...

    省市联动 已经修改好了

    8. **前端框架集成**:如果你的项目使用了前端框架(如Vue.js、React或Angular),则需要将省市联动的逻辑与框架的组件系统结合,实现数据绑定和状态管理。 9. **优化用户体验**:可以添加加载动画,让用户知道数据...

    easyui增删改很好的例子

    在后台,描述中提到使用了.NET技术,这可能是指ASP.NET或ASP.NET MVC,它们是Microsoft开发的服务器端框架,用于构建Web应用。通常,EasyUI与后端的交互通过AJAX完成,发送HTTP请求至服务器进行数据的CRUD操作。在...

    jquery easyui javascript

    jQuery EasyUI 可以很好地与其他技术集成,如与后端的Spring MVC、ASP.NET MVC等框架配合,或者与前端的Vue.js、React.js等现代框架结合,实现更复杂的应用场景。 总的来说,jQuery EasyUI 是一个强大且易用的前端...

    easyui1.3.4API

    - **MVC 框架集成**: 可与 ASP.NET MVC、Spring MVC 等后端框架结合,实现前后端分离的开发模式。 - **RESTful API**: 支持与 RESTful 风格的 API 进行交互。 总结起来,EasyUI 1.3.4 API 提供了丰富的组件和功能...

    easyui例子

    在实际项目中,EasyUI通常与后端框架如Spring MVC、ASP.NET等结合,通过Ajax进行前后端数据交互。了解JSON格式和HTTP协议也有助于你更好地利用EasyUI构建功能完善的Web应用。 总的来说,"easyui例子"压缩包是学习和...

Global site tag (gtag.js) - Google Analytics