带有添加参数的 Kendo DropdownList 服务器过滤

Posted

技术标签:

【中文标题】带有添加参数的 Kendo DropdownList 服务器过滤【英文标题】:Kendo DropdownList server filtering with added parameters 【发布时间】:2018-09-15 09:53:09 【问题描述】:

如果我能获得过滤工作的客户端或服务器端,我很高兴,但是将 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);
    

“文本”应包含过滤器文本。

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

【问题讨论】:

请详细说明您的问题。 动作的文本参数始终为空,应包含过滤文本。不知道如何进一步阐述。 【参考方案1】:

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

试试这个-->

 <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,则不是搜索。

【讨论】:

@Chris 你是怎么解决的?我试图弄清楚,但我无法将文本参数发送到该方法。此外,仅在初始化组件时才调用 params 函数 init之后,可以在dropDown.dataSource.read(parameters)等数据源上调用read并传入新参数 --> dataSource.read(myFilter: GetFilterValue()); 【参考方案2】:

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

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

【讨论】:

以上是关于带有添加参数的 Kendo DropdownList 服务器过滤的主要内容,如果未能解决你的问题,请参考以下文章

Kendo MVVM 绑定添加/插入项目,如何?

如何从 Kendo.Grid 的 ClientTemplate 内部向 JavaScript 函数发送参数?

MVC DropDownLis 二级联动实现

刷新 Kendo UI viewModel

带有自定义JSON Web服务器的Kendo UI Grid - “未捕获的TypeError:this.replace不是函数”

如何使用 jQuery 将 Kendo DropDownList 动态添加到 html5 表中