我正在尝试在Kendo UI(ASP.NET 5,MVC6)中使用服务器过滤进行自动完成由于MVC Wrapper中没有Autocomplete,我不得不使用以下代码:
<script>
var dataSource = new kendo.data.DataSource({
serverFiltering: true,
serverOperation: true,
type: "aspnetmvc-ajax",
transport: {
read: {
url: "@Url.Content("~/api/Get")",
type: "GET"
}
},
schema: {
data: "Data",
total: "Total"
}
})
$("#@Model.Name").kendoAutoComplete({
placeholder: "@Model.Watermark",
minLength: 3,
filter: "contains",
dataSource: dataSource
});
</script>
问题是发送到控制器的查询字符串如下所示:?排序=&组=&filter=
所以它不包括任何过滤信息
在服务器端,我试图将其映射到DataSourceRequest
现在我使用以下变通方法来传递额外的参数来进行服务器端过滤,但我仍然想使用剑道原生过滤:
<script>
var dataSource = new kendo.data.DataSource({
serverFiltering: true,
serverOperation: true,
type: "aspnetmvc-ajax",
transport: {
read: {
url: "@Url.Content("~/api/Get")",
type: "GET",
data: onAdditionalData
}
},
schema: {
data: "Data",
total: "Total"
}
})
$("#@Model.Name").kendoAutoComplete({
placeholder: "@Model.Watermark",
minLength: 3,
filter: "contains",
dataSource: dataSource
});
function onAdditionalData() {
return {
text: $("#@Model.Name").val()
};
}
</script>
控制器代码:
[Route("api/Get")]
[HttpGet]
public JsonResult Get([DataSourceRequest] DataSourceRequest request, string text = "")
{
var list = (new List<string>() { "value1", "value2", "value3", "test" } ).AsQueryable();
return Json(list.Where(x => x.Contains(text)).ToDataSourceResult(request));
}