【问题标题】:MVC KendoUI cascading dropdownlists, on multiple parentsMVC KendoUI 级联下拉列表,在多个父级上
【发布时间】:2014-07-23 10:36:10
【问题描述】:

我在 kendoui 网格中有三列,分别是“送货地点”、“取货地点”和“可用送货选项”。当任一位置列发生更改(“送货地点”或“取货地点”)时,“可用的运输选项”列应相应更改。

我可以对两列使用 Cascade-from 来实现这一点(即,如果一列发生更改,其他列将根据第一列数据列出结果),但不知道如何为两列或更多列实现相同的结果。

如何实现两列或多列的级联?

代码: JS函数:

    function filterShippingOptions() {
   return { pickUpLocationId: $("#PickUpLocationId").data("kendoDropDownList").value(),        deliveryLocationId: $("#deliveryLocationId").data("kendoDropDownList").value() };
}

AvailableShippingOptions 编辑器:

@(Html.Kendo().DropDownListFor(m => m)
.DataValueField("ShippingOptionId")
.DataTextField("ShippingOptionName")
.OptionLabel("Select...")
.AutoBind(false)
.DataSource(dataSource =>
              {
                  dataSource.Read(read =>
                  {
                      read.Action("GetAvailableShippingOptions", "ProductionZone").Type(HttpVerbs.Post)
                          .Data("filterShippingOptions");
                  }).ServerFiltering(true);
              })
              //.CascadeFrom("RMSupplierLocationViewModel")
              .CascadeFrom("DeliveryLocationViewModel")
)
    @Html.ValidationMessageFor(m => m)

【问题讨论】:

  • 请查看示例多父级联示例Multiple Parents Cascade DropDownList
  • 您能告诉我们您是如何解决的吗?
  • @FedericoNavarrete:我已经发布了修复程序。实现起来非常简单。

标签: asp.net-mvc kendo-ui kendo-grid


【解决方案1】:

有两种选择可以实现您的目标:

选项 1:您可以使用级联 + 服务器过滤
选项 2:您可以使用级联 + 客户端过滤

首先,您需要在两个位置下拉菜单(“送货地点”或“取货地点”)上定义事件,如下所示:

@(Html.Kendo().DropDownListFor(m => m)
.Name("PickUpLocationId")
.DataValueField("ShippingOptionId")
....
....
.Events(evnt=>evnt.Cascade("onCascade")) //Need to add this Event on Parent Drop Downs
)

对另一个位置下拉菜单重复相同的操作。您的级联事件应如下所示:

服务器端过滤

@(Html.Kendo().DropDownListFor(m => m)
.Name("ShipingOption")
.DataValueField("ShippingOptionId")
.DataTextField("ShippingOptionName")
.OptionLabel("Select...")
.AutoBind(false)
.DataSource(dataSource =>
              {
                  dataSource.Read(read =>
                  {
                      read.Action("GetAvailableShippingOptions", "ProductionZone").Type(HttpVerbs.Post)
                          .Data("filterShippingOptions");
                  }).ServerFiltering(true);
              })
)

JS函数

  function onCascade(e){
        ("#ShipingOption").data("kendoDropDownList").dataSource.read(); 
    }

function filterShippingOptions() {
   return { pickUpLocationId: $("#PickUpLocationId").data("kendoDropDownList").value(),        deliveryLocationId: $("#deliveryLocationId").data("kendoDropDownList").value() };
}     

客户端过滤
对于第二个选项,您需要检索 Shipping 选项的所有记录,禁用服务器过滤为 false 并在 onCascade JS 函数中应用过滤。

【讨论】:

  • 我刚刚编辑了 onCascade javascript 函数并在下拉列表之前添加了 $ 符号,否则它会给出错误。该解决方案是完美的,可以根据要求工作。节省了很多时间。谢谢!!!
  • 它不起作用:\,如果你有第二个级联,只有第一个级联起作用,它什么都不做。
【解决方案2】:

我做到了如下:

查看代码:

<script>
    function filterShippingOptions() {
        return { locationId: $("#LocationViewModel").data("kendoDropDownList").value(), deliveryLocationId: $("#Location2ViewModel").data("kendoDropDownList").value() };
    }

function onCascade(e) {
  $("#ShippingOptionViewModel").data("kendoDropDownList").dataSource.read();
}
</script>

编辑器代码:

@model Comanex.Models.ShippingOptionsViewModel
@(Html.Kendo().DropDownListFor(m => m)
    .DataValueField("ShippingOptionId")
    .DataTextField("ShippingOptionName")
    .OptionLabel("Select")
    .AutoBind(false)
    .DataSource(dataSource =>
                  {
                      dataSource.Read(read =>
                      {
                          read.Action("GetAvailableShippingOptions", "Shipping").Type(HttpVerbs.Post)
                              .Data("filterShippingOptions");
                      }).ServerFiltering(true);
                  })
)
@Html.ValidationMessageFor(m => m)

控制器方法:

public JsonResult GetAvailableShippingOptions(string PickUpLocationId, string DeliveryLocationId)
    {
   //Getting value from database
        return Json(ShippingOptionRepository.GetAvailableShippingOptions(PickUpLocationId, DeliveryLocationId), JsonRequestBehavior.AllowGet);
    }

两个父控件(在我的情况下为下拉列表)应具有以下内容:

.Events(evnt => evnt.Cascade("onCascade")) //Need to add this Event on Parent Drop Downs

【讨论】:

  • 你太棒了!感谢您的帮助!
猜你喜欢
  • 2012-11-17
  • 2011-10-05
  • 1970-01-01
  • 2023-03-30
  • 2011-07-05
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
相关资源
最近更新 更多