Kendo DropDownList FilterText始终为null

时间:2018-03-13 13:01:13

标签: asp.net-mvc kendo-asp.net-mvc kendo-dropdown

我有一个我无法过滤的Kendo DropdownList - 在查看控制器中收到的数据时,我注意到"字符串文本"始终为空:

    [OutputCache(NoStore = true, Duration = 0)]
    public JsonResult GetAssemblys(string text, long site)
    {
        return Json(CreateFilteredList(text, site, (long)AssetTypeEnum.Assembly), JsonRequestBehavior.AllowGet);
    }

这是DropDownList的代码:

 <div>@(Html.Kendo().DropDownList()
        .Name("AssemblySelector")
        .DataTextField("AssetName")
        .DataValueField("AssetId")
        .HtmlAttributes(new { style = "width: 570px;" })
                    .OptionLabel("Select assembly...")

        .DataSource(s =>
        {
            s.Read(r => r.Action("GetAssemblys", "Form707B").Data("getsite"));
            s.ServerFiltering(true);

        })

        .Filter(FilterType.Contains)
        .Height(300)
        .SelectedIndex(0))

在我将.Data(&#34; getite&#34;))部分添加到read方法之前,这是有效的。 getsite()返回一个长的被调用站点(这在控制器中成功接收)。

1 个答案:

答案 0 :(得分:0)

使用MVC Builder的人通常不知道的是,Fluent构建器会将默认的读取数据处理程序发送到控制器。

如果覆盖数据处理程序,则需要自己发送文本过滤器或调用它通常调用的方法,如下所示

if (DataSource.ServerFiltering && !DataSource.Transport.Read.Data.HasValue() && DataSource.Type != DataSourceType.Custom) {
    DataSource.Transport.Read.Data = new ClientHandlerDescriptor {
        HandlerName = "function() { return kendo.ui.DropDownList.requestData(jQuery(\"" + EscapeRegex.Replace(Selector, @"\\$1") + "\")); }"
    };
}

这样做你的getite函数应该是这样的。

function getsite() {
    // drop down element
    var $dd = $('#AssemblySelector');
    // widget
    var dd = dd.data('kendoDropDownList');

    var filterText = dd.input.text();

    var site = null; // do your logic for this.
    return {
        site: site,
        text: filterText
    };
}

function getsite() {
    // drop down element
    var $dd = $('#AssemblySelector');
    // widget
    var dd = dd.data('kendoDropDownList');

    var ret = kendo.ui.DropDownList.requestData($dd);
    ret['site'] = site;
    return ret;
}