MVC 三级联动下拉列表菜单

在传统的webForms页面中,实现下拉列表三级联动甚至是8联动都是很简单的事情。可是在ASP.Net MVC中就不这么容易了。今天我就讲讲下拉三级联动,三级联动会了,那么8级9级也不在话下。
先看看Linq to class
看见了吧就是这三张表分别是公司,变电站,设备。ok我们看看视图
好的,接下来我们看看代码的实现,先看后台控制器
using System; 
  using System.Collections.Generic; 
  using System.Linq; 
  using System.Web; 
  using System.Web.Mvc; 
  using System.Web.Mvc.Ajax; 
  using MvcApplication1.Models; 
  namespace MvcApplication1.Controllers 
 { 
          public  class TestController : Controller 
         { 
  
                 TestDataContext testDataContext =  new TestDataContext(); 
  
                  public ActionResult Index() 
                 { 
                          return View( "~/Views/Index.aspx"); 
                 } 
  
                  public JsonResult GetCompany() 
                 { 
                         IQueryable queryResult = testDataContext.TCompany; 
                          return Json(queryResult.ToList(),JsonRequestBehavior.AllowGet); 
                 } 
  
                  public JsonResult GetPlant( string id) 
                 { 
                          return Json(testDataContext.TPlant.Where(P => P.companyId == int.Parse(id)).ToList(),JsonRequestBehavior.AllowGet); 
                 } 
  
                  public JsonResult GetLogicEquipment( string id) 
                 { 
  
                          string[] ids = id.Split( ",".ToCharArray()); 
                          string companyId = ids[0]; 
                          string plantId = ids[1]; 
                          return Json(testDataContext.TLEquipment.Where(E => E.companyId == int.Parse(companyId) && E.plantId ==  int.Parse(plantId)).ToList(),JsonRequestBehavior.AllowGet); 
                 } 
         } 
 }
第一个方法获取所有的公司列表,第二个方法根据公司Id获取变电站列表,第三个方法根据公司,变电站,获取设备。注意,这里的参数要全部是id,而且必须是id。为什么呢?因为你的路由器是id啊。这里估计很多人不注意,结果请求发不到控制器,也不知道怎么回事。说到这里看看路由
  public  static  void RegisterRoutes(RouteCollection routes) 
                 { 
                         routes.IgnoreRoute( "{resource}.axd/{*pathInfo}"); 
  
                         routes.MapRoute( 
                                  "Default",                                                                                             // Route name 
                                  "{controller}/{action}/{id}",                                                      // URL with parameters 
                                  new { controller =  "Home", action =  "Index", id = "" }     // Parameter defaults 
                         ); 
  
                 }
第三个参数是id,如果你实在不想在控制器传id这么个参数,那你就去改路由吧。
<</font>%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"Inherits="System.Web.Mvc.ViewPage" %> 

<</font>asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
</</font>asp:Content> 
<</font>asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

        <</font>script src="../Scripts/jquery-1.3.2.min.js" type="text/javascript"></</font>script> 

        <</font>script type="text/javascript"> 
                $(document).ready(function () { 
                        GetByJquery(); 
                        $("#ddlCompany").change(function () { GetPlant() }); 
                        $("#ddlPlant").change(function () { GetLogicEquipment() }); 
                }); 

                function GetByJquery() { 

                        $("#ddlCompany").empty();    
                        $.getJSON("/Test/GetCompany/",function (data) { 
                                $.each(data, function (i, item) { 
                                        $("<</font>option></</font>option>") 
                                        .val(item["companyId"]) 
                                        .text(item["companyName"]) 
                                        .appendTo($("#ddlCompany")); 
                                }); 
                                GetPlant(); 
                        }); 
                } 
                function GetPlant() { 
                        $("#ddlPlant").empty(); 
                        var url = "/Test/GetPlant/" +    $("#ddlCompany").val()+"/"; 
                         
                        $.getJSON(url, function (data) { 
                                
                                $.each(data, function (i, item) { 
                                        $("<</font>option></</font>option>") 
                                        .val(item["plantId"]) 
                                        .text(item["plantName"]) 
                                        .appendTo($("#ddlPlant")); 
                                }); 
                                GetLogicEquipment(); 
                        }); 
                } 
                function GetLogicEquipment() { 
                        $("#ddlLogicEquipment").empty(); 
                        var url = "/Test/GetLogicEquipment/"+$("#ddlCompany").val()+","+$("#ddlPlant").val()+"/"; 
                        $.getJSON(url, function (data) { 
                         
                                $.each(data, function (i, item) { 
                                        $("<</font>option></</font>option>") 
                                        .val(item["LogicEquipmentId"]) 
                                        .text(item["logiEquipmentName"]) 
                                        .appendTo($("#ddlLogicEquipment")); 
                                }); 
                        }); 
                }    
        </</font>script> 

        <</font>table> 
                <</font>tr> 
                        <</font>td> 
                                <</font>select id="ddlCompany" /> 
                        </</font>td> 
                        <</font>td> 
                                <</font>select id="ddlPlant" /> 
                        </</font>td> 
                        <</font>td> 
                                <</font>select id="ddlLogicEquipment" /> 
                        </</font>td> 
                </</font>tr> 
        </</font>table> 
</</font>asp:Content>
前台通过发送Ajax请求向控制器索取数据。得到Json格式的数据以后,循环遍历。

转载于:https://www.cnblogs.com/ziye16888/archive/2013/05/22/3092103.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值