@David Perlman,我正在完全编辑这个答案,因为我现在更好地理解了你的问题。在他们使用 OData 的Kendo
示例中,Server Filtering
它具有开箱即用的服务器过滤,这是我自己不知道的。如果您像我一样使用 MVC 控制器,则必须修改示例并使用参数映射,就像我将在新代码示例中使用的那样。在我的示例中,我使用了一个简单的“站点”表,Entity Framework
并且我有一个直接连接到站点表的视图。我有一个名为 Lookups.cs 的类,我返回一个动态模型 GetSitesStartsWith(string startsWith) 像这样:
public dynamic GetSitesStartsWith(string startsWith)
{
return _context.vAaiomsSites
.Select(s => new
{
ID = s.ID,
SiteName = s.SiteName
}).OrderBy(s => s.SiteName).Where(s => s.SiteName.StartsWith(startsWith));
}
因此,在我的申请控制器中,我创建了一个 JsonResult,如下所示:
public JsonResult GetSitesStartsWith(string startsWith)
{
var lookups = new Lookups();
var data = lookups.GetSitesStartsWith(startsWith);
return Json(data, JsonRequestBehavior.AllowGet);
}
最后要做的是将自动完成代码添加到连接到此 JsonResult 而不是 OData 的视图中,如下所示:
<div id="example" class="k-content">
<div class="demo-section">
<h2>Sites</h2>
<input id="sites" style="width: 250px" />
</div>
<script>
$(document).ready(function() {
$("#sites").kendoAutoComplete({
placeholder: "Enter site ...",
dataTextField: "SiteName",
filter: "startswith",
minLength: 3,
dataSource: {
type: "json",
serverFiltering: true,
serverPaging: true,
pageSize: 20,
transport: {
read:
{
url: "Requisitions/GetSitesStartsWith"
}, //read
parameterMap: function() {// send value of autocomplete as the "startsWith" parameter
return {
startsWith:$("#sites").data("kendoAutoComplete").value()
};
}
} //transport
} //datasource
}); //kendoAutoComplete
}); //DocumentReady
</script>
</div>
我有这个示例工作,它在服务器上进行过滤,并使用开发人员工具进行了验证。如果您需要更多帮助,请告诉我。