KendoUI 级联下拉列表,需要来自 2 个下拉列表的值。

Posted

技术标签:

【中文标题】KendoUI 级联下拉列表,需要来自 2 个下拉列表的值。【英文标题】:KendoUI cascading dropdownlists, need value from 2 dropdownlists. 【发布时间】:2012-11-17 05:41:21 【问题描述】:

我有 3 个级联下拉列表,如下所示:

<p>
    <label for="categories">Catergories:</label>
    @(html.Kendo().DropDownList()
          .Name("categories")
          .OptionLabel("Select category...")
          .DataTextField("CategoryName")
          .DataValueField("CategoryId")
          .DataSource(source => 
               source.Read(read => 
                   read.Action("GetCascadeCategories", "ComboBox");
               );
          )
    )
</p>
<p>
    <label for="products">Products:</label>
    @(Html.Kendo().DropDownList()
          .Name("products")
          .OptionLabel("Select product...")
          .DataTextField("ProductName")
          .DataValueField("ProductID")
          .DataSource(source => 
              source.Read(read =>
              
                  read.Action("GetCascadeProducts", "ComboBox")
                      .Data("filterProducts");
              )
              .ServerFiltering(true);
          )
          .Enable(false)
          .AutoBind(false)
          .CascadeFrom("categories")
    )
    <script>
        function filterProducts() 
            return 
                categories: $("#categories").val()
            ;
        
    </script>
</p>
<p>
    <label for="orders">Orders:</label>
    @(Html.Kendo().DropDownList()
          .Name("orders")
          .OptionLabel("Select order...")
          .DataTextField("ShipCity")
          .DataValueField("OrderID")
          .DataSource(source => 
              source.Read(read =>
              
                  read.Action("GetCascadeOrders", "ComboBox")
                      .Data("filterOrders");
              )
              .ServerFiltering(true);
          )
          .Enable(false)
          .AutoBind(false)
          .CascadeFrom("products")
    )
    <script>
        function filterOrders() 
            return 
                products: $("#filterOrders").val()
            ;
        
    </script>
</p>

这是控制器的样子:

    public JsonResult GetCascadeCategories()
    
        var northwind = new NorthwindDataContext();

        return Json(northwind.Categories.Select(c => new  CategoryId = c.CategoryID, CategoryName = c.CategoryName ), JsonRequestBehavior.AllowGet);
    

    public JsonResult GetCascadeProducts(string categories)
    
        var northwind = new NorthwindDataContext();
        var products = northwind.Products.AsQueryable();

        if (!string.IsNullOrEmpty(categories))
        
            products = products.Where(p => p.CategoryID.ToString() == categories);
        

        return Json(products.Select(p => new  ProductID = p.ProductID, ProductName = p.ProductName), JsonRequestBehavior.AllowGet);
    

控制器中的 Action 只接受 1 个参数,即您在下拉列表的 DataValueField() 属性中指定的任何值。

但是,对于我的第三个下拉列表,我希望其中的项目依赖于前两个下拉列表,而不仅仅是前一个。

如何从我的操作中同时获取第一个和第二个下拉列表的选定值?

【问题讨论】:

【参考方案1】:

要在第三个 DDL 请求其数据时将第一个 DDL 的值与第二个 DDL 的值一起发送,您只需将此值添加到 Read 的 Data 函数 请求。

例如

<script>
    function filterOrders() 
        return 
            categories: $("#categories").val(),
            products: $("#filterOrders").val()
        ;
    
</script>

同时将动作方法签名更改为多一个参数

public JsonResult GetCascadeOrders(string categories,string products)

【讨论】:

以上是关于KendoUI 级联下拉列表,需要来自 2 个下拉列表的值。的主要内容,如果未能解决你的问题,请参考以下文章

具有级联下拉列表的 Kendo UI 网格

禁用 KendoUI 下拉列表选项

用于实现级联下拉列表的 Vue.js 和 django rest 框架

如何解决不工作的级联下拉

Power Apps中的级联下拉列表

KendoUI 设置下拉列表的宽度