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

时间:2018-04-05 14:18:56

标签: javascript asp.net-mvc razor kendo-ui kendo-dropdown

如果我可以获得过滤工作客户端或服务器端,我很高兴,但在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);
    }

&#34;文本&#34;应该包含过滤文本。

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

2 个答案:

答案 0 :(得分:2)

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

试试这个 - &gt;

 <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添加了一些默认过滤器,所以我不得不使用一个条件来查找我正在使用的过滤器类型。如果为null,则不是搜索。

答案 1 :(得分:0)

给出上面的示例,在初始化之前加载这样的'params'javascript函数应该可以。每次更改过滤器值时,在mvc Controller方法中,“ text”,“ a”和“ b”及其给定值都可用。这样,您可以根据需要传入其他参数和值:

<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")
)