Kendo DropDownList FilterText 始终为空
Kendo DropDownList FilterText always null
我有一个无法过滤的 Kendo DropdownList - 在查看控制器中接收到以下函数的数据时,我注意到 "string text" 始终为空:
[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("getsite")) 部分添加到读取方法之前有效。 getsite() returns 一个长调用的站点(在控制器中成功接收)。
使用 MVC Builder 的人通常不知道的是,fluent builder 放置了一个默认的读取数据处理程序,用于将过滤器文本发送到他们的控制器。
如果您覆盖数据处理程序,您需要自己发送文本过滤器或调用它通常调用的方法,如下所示
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, @"\") + "\")); }"
};
}
为此,您的 getsite 函数应如下所示。
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;
}
我有一个无法过滤的 Kendo DropdownList - 在查看控制器中接收到以下函数的数据时,我注意到 "string text" 始终为空:
[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("getsite")) 部分添加到读取方法之前有效。 getsite() returns 一个长调用的站点(在控制器中成功接收)。
使用 MVC Builder 的人通常不知道的是,fluent builder 放置了一个默认的读取数据处理程序,用于将过滤器文本发送到他们的控制器。
如果您覆盖数据处理程序,您需要自己发送文本过滤器或调用它通常调用的方法,如下所示
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, @"\") + "\")); }"
};
}
为此,您的 getsite 函数应如下所示。
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;
}