Kendo 使用添加的参数过滤 DropdownList 服务器

Kendo DropdownList server filtering with added parameters

如果我能使过滤工作在客户端或服务器端,我会很高兴,但是将 DataSource 操作和 ServerFiltering(true) 上的发送参数结合起来会导致空过滤值(文本参数)。

下拉列表是使用级联的系列的一部分。

查看:

@(Html.Kendo().DropDownList()
          .Name("name")
          .OptionLabel(new SelectListItem { Text = "Select...", Value = "" })
          .DataTextField("Text")
          .DataValueField("Value")
          .Filter("contains")
          .DataSource(source =>
          {
              source.Read(read =>
              {
                  read.Action("Action", "Controller")
                      .Data("params");
              })
              .ServerFiltering(true);
          })
          .Enable(false)
          .AutoBind(false)
          .CascadeFrom("parent")
    )

    <script>
        function params() {
            return {
                a: '',
                b: 1
            };
        }
    </script>

控制器:

public JsonResult Action(string text, string a, int b)
    {
        return Json((List<SelectListItem>), JsonRequestBehavior.AllowGet);
    }

"text" 应包含过滤器文本。

https://demos.telerik.com/aspnet-mvc/dropdownlist/serverfiltering

我想我明白你在问什么。您想要将下拉列表的当前值作为参数发送到数据源读取事件函数的数据绑定。

试试这个-->

 <script>
      function params() {
           return {
                Text = $("#name").data("kendoDropDownList").text(),
                a: '',
                b: 1
            };
        }
 </script>

解决方案:

<script>
    function params() {
           return {
                text = null,
                a: '',
                b: 1
            };
        }

    var filter = $('#name').data('kendoDropDownList').dataSource.filter();

    if (filter && filter.filters[0].operator == "contains") {
        params.text = filter.filters[0].value;
    }
</script>

我让它工作的唯一方法是 Kendo 添加一些默认过滤器,所以我不得不使用一个条件来查找我正在使用的过滤器类型。如果为空则不是搜索。

鉴于上面的示例,在初始化之前像这样加载 'params' javascript 函数应该可行。每次过滤器值发生变化时,'text'、'a' 和 'b' 都将在 mvc Controller 方法中使用它们的给定值。这样您就可以根据需要传入其他参数和值:

<script>
    function params() {
        var filterText = "";
        var filter = $('#name').data('kendoDropDownList').dataSource.filter();
        if (filter && filter.filters[0].operator == "contains") {
            filterText = filter.filters[0].value;
        }

        return {
            text: filterText,
            a: '',
            b: 1
        };
    }
</script>

@(Html.Kendo().DropDownList()
      .Name("name")
      .OptionLabel(new SelectListItem { Text = "Select...", Value = "" })
      .DataTextField("Text")
      .DataValueField("Value")
      .Filter("contains")
      .DataSource(source =>
      {
          source.Read(read =>
          {
              read.Action("Action", "Controller")
                  .Data("params");
          })
          .ServerFiltering(true);
      })
      .Enable(false)
      .AutoBind(false)
      .CascadeFrom("parent")
)