C# Mvc下拉列表框三级联动

本文介绍了一种使用Ajax实现的省份、城市及地区的三级联动选择器。通过前后端交互,根据用户选择的省份动态加载对应的城市,并进一步加载所属地区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先声明,本人语言表达能力并不是很好,所以呢,以代码为主

<script>
        //获取城市
        function XiaCity(id)
        {
        //判断省份是否有id
            if(id==null)
            {
                $("#provinceName").empty().append("<option>请选择省份</option>");
                $("#cityName").empty().append("<option>请选择城市</option>");
                return;
            }
            else
            {
                $("#cityName").empty().append("<option>请选择城市</option>");
            }
            $.ajax({
                url: "/User/TheCity/" + id,
                type: "post",
                success: function (data) {
                    $("#cityName").empty().append("<option>请选择城市</option>");
                    $(data).each(function () {
                        $("#cityName").append("<option value='" + this.Value + "'>" + this.Text+ "</option>")
                    })
                }

                })
        }
        //获取地区
        function XiaArea(id) {
            if (id == null) {
              
                $("#areaName").empty().append("<option>请选择城区</option>");
                return;
            }
           
            $.ajax({
                url: "/User/TheArea/" + id,
                type: "post",
                success: function (data) {
                    $(data).each(function () {
                        $("#AreaName").append("<option value='" + this.Value + "'>" + this.Text + "</option>")
                    })
                }

            })
        }
        function OKadd(data)
        {
            if(data>0)
            {
                alert("添加成功!");
            }
        }
        //预加载
        $(function () {
            $("#button1").click(function () {
                if ($("#from0").valid) {
                    $("#form0").ajaxSubmit({
                        type: "post",
                        url: "/User/Index/",
                        success: function (data) {
                            OKadd(data);
                        }
                    })
                }
            })
            
        })
 </script>
这里是用ajax调用后台控制器
<p>
     
     @Html.DropDownListFor(n => n.provinceName, ViewBag.Province as List<SelectListItem>, "请选择省份", new { @onchange = "XiaCity(this.value)" })
     @Html.DropDownListFor(n => n.cityName, new List<SelectListItem>(), "请选择城市", new { @onchange = "XiaArea(this.value)" })
     @Html.DropDownListFor(n => n.AreaName, new List<SelectListItem>(), "请选择城区")
     
</p>
这里使用强类型视图
//显示页面
public ActionResult Index()
           
        { 
            TheProvince();
            return View();
        }
//获取省份
public void TheProvince()
        {
            UserBLL bll = new UserBLL();
            DataTable dt = bll.GetProvince();
            var linq = from s in dt.AsEnumerable()
                       select new SelectListItem
                       {
                           Value = s.Field<string>("provinceId"),
                           Text = s.Field<string>("provinceName")
                       };
            ViewBag.Province = linq.ToList();
        }
//获取城市
public JsonResult TheCity(string id)
        {
            UserBLL bll = new UserBLL();
            DataTable dt = bll.GetCity(id);
            var linq = from s in dt.AsEnumerable()
                       select new SelectListItem
                       {
                           Value = s.Field<string>("cityId"),
                           Text = s.Field<string>("cityName")
                       };
            return Json(linq.ToList());
        }
//获取地区
public JsonResult TheArea(string id)
        {
            UserBLL bll = new UserBLL();
            DataTable dt = bll.GetArea(id);
            var linq = from s in dt.AsEnumerable()
                       select new SelectListItem
                       {
                           Value = s.Field<string>("AreaId"),
                           Text = s.Field<string>("areaName")
                       };
            return Json(linq.ToList());
        }
控制器中创建方法Index,TheProvince,TheCity,TheArea 获取省份不需要传参数,但是获取城市和地区需要传递参数,参数为他的父级Id,获取地区中的数据为Linq语句
///命名空间
namespace ZS.Test.Model
{
//地区
    public class Area
    {
        public string id{get;set;}
      public string AreaName{get;set;}
      public string AreaId{get;set;}
      public string father{get;set;}
    }
}
namespace ZS.Test.Model
{
//城市
    public class City
    {
        public string id{get;set;}
      public string cityName{get;set;}
      public string cityId{get;set;}
      public string father{get;set;}
    }
}
namespace ZS.Test.Model
{
//省份
    public class Province
    {
        public int id{get;set;}
      public string provinceName{get;set;}
      public string provinceId{get;set;}
    }
}

Model中的数据除省份没有父类Id,其他表中的数据 例如Area中 father连接的是City中的Id
Mvc中页面显示的数据是强类型视图的,而上述Model是类库中的用于连接数据库,前台显示需要您自己手动敲一敲,最好把所有的字段都放在一个类中


为什么要发一个三级联动的代码,因为个人感觉自己敲过的代码过一段时间就会忘掉,所以发到csdn上也方便自己日后能回来看一下

<asp:TemplateColumn HeaderText="Plant" HeaderStyle-HorizontalAlign="center"> <ItemStyle CssClass="dxgv"></ItemStyle> <ItemTemplate> <asp:Label ID="lb_week_p" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.PLANTKEY") %>'> </asp:Label> </ItemTemplate> <FooterTemplate> <font face="宋体"></font> <asp:DropDownList ID="ddl_week_p" runat="server" Width="100px" AutoPostBack="true"> <asp:ListItem Selected="True" Value="">----</asp:ListItem> </asp:DropDownList> </FooterTemplate> <EditItemTemplate> <asp:DropDownList ID="ddl_e_week_p" ToolTip='<%# DataBinder.Eval(Container, "DataItem.PLANTKey") %>' OnSelectedIndexChanged="ddl_e_week_p_SelectedIndexChanged" AutoPostBack="true"runat="server" Width="100px"> </asp:DropDownList> <asp:Label ID="lb_week_p_edit" Visible="false" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.PLANTKEY") %>'></asp:Label> </EditItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="Storage Location" HeaderStyle-HorizontalAlign="center"> <ItemStyle CssClass="dxgv"></ItemStyle> <ItemTemplate> <asp:Label ID="lb_week_s" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.STORAGE_LOCATIONKEY") %>'> </asp:Label> </ItemTemplate> <FooterTemplate> <font face="宋体"></font> <asp:DropDownList ID="ddl_week_s" runat="server" Width="90px"> <asp:ListItem Selected="True" Value="">----</asp:ListItem> </asp:DropDownList> </FooterTemplate> <EditItemTemplate> <asp:DropDownList ID="ddl_e_week_s" ToolTip='<%# DataBinder.Eval(Container, "DataItem.STORAGE_LOCATIONKey") %>' runat="server" Width="90px"> </asp:DropDownList> <asp:Label ID="lb_week_s_edit" Visible="false" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.STORAGE_LOCATIONKEY") %>'></asp:Label> </EditItemTemplate> </asp:TemplateColumn> protected void ddl_week_p_SelectedIndexChanged(object sender, EventArgs e) { DropDownList item = (DropDownList)((Control)sender).Parent.Parent.FindControl("ddl_week_s"); item.DataTextField = "txt";
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值