2

У меня есть 3 каскадных DropDownLists следующим образом:KendoUI каскадирующий dropdownlists, нужно значение от 2 dropdownlists.

<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); 
    } 

Действие в контроллере происходит только в 1 параметр, который является то, что значение, которое у вас есть укажите в свойстве DataValueField() выпадающего списка.

Однако, для моего 3-го раскрывающегося списка, я хочу, чтобы элементы в нем были зависимыми от BOTH первых 2 dropdownlists, а не только предыдущего.

Как я могу получить как выбранное значение 1-го, так и 2-го выпадающего списка из моего действия?

ответ

4

Чтобы отправить значение первого DDL наряду со значением второго DDL, когда третий DDL запрашивает его данные нужно просто добавить это значение к функции данных из запроса чтения.

например.

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

изменить также способ действия подписи, чтобы иметь еще один аргумент

public JsonResult GetCascadeOrders(string categories,string products)