使用网格外的控件在MVC中过滤带有远程数据绑定的Kendo UI网格
本文关键字:网格 数据绑定 Kendo UI 控件 MVC 过滤 | 更新日期: 2023-09-27 17:53:01
我正在做一个项目,客户希望能够在页面上有一个"控制",用户可以开始打字,数据网格将与每次击键过滤。
过滤器应该使用以开头的操作符,并且删除输入("control")中的所有字符将使Grid重置为其原始的未过滤状态。
我的控制器,我不想修改它或添加额外的参数:
public JsonResult GetFoo([DataSourceRequest]DataSourceRequest request, bool active = true)
{
List<Foo> model = FooContext.Foo.GetFoo(active);
model = model.OrderBy(m => m.Name).ToList();
return Json(model.ToDataSourceResult(request),JsonRequestBehavior.AllowGet);
}
这是我当前的栅格:
@(Html.Kendo().Grid<foo>()
.Name("fooTable")
.PrefixUrlParameters(Settings.Grid.PrefixUrlParameters)
.Columns(columns =>
{
columns
.Bound("fooName")
.ClientTemplate("<a href='#= Id #'>#= fooName #</a>");
columns
.Bound("StateName")
.Title("State").Width(120);
columns.Bound("PreviousYearsHomes")
.Title("Previous Years Homes")
.Width(120);
columns.Bound("CurrentYearsHomes")
.Title("Current Years Homes")
.Width(120);
.Sortable()
.Resizable(q => q.Columns(true))
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action("GetBuilders", "Builders", new { Area = "Administrator", active = true }))
)
)
Filter应该过滤'fooName'列
我建议指定数据源上可用的.Data(string handler)
方法,例如
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read
.Action("GetBuilders", "Builders", new { Area = "Administrator", active = true })
.Data("getDataParams")
)
)
这允许您指定一个javascript函数,该函数返回一个JSON对象,定义附加到ajax请求的附加参数。
你可以这样写:
var getDataParams = function (e) {
var result = {
name: $('#fooNameInput').val()
}
return result;
};
并触发网格的刷新(从键向上事件或类似的):
$("#fooTable").data("kendoGrid").dataSource.read();
一些文档的帮助:
剑道论坛工作示例
MVC Fluent docs
我真的不想回答我自己的问题,但是对于任何为自己尝试这个的人来说,这就是我所做的,以获得我正在寻找的结果。
添加了一个Id为fooNameInput的输入
<script type="text/javascript">
$(function () {
$('#fooNameInput').on("keyup change", function () {
var Value = $(this).val();
if (Value.length) {
FilterGridByName(Value, 'Name');
}
else {
$('#fooTable').data("kendoGrid").dataSource.filter([]);
}
});
function FilterGridByName(Value, Field) {
if (Field != "") {
if (Value != "") {
$('#fooTable').data("kendoGrid").dataSource.filter({ field: Field, operator: "startswith", value: Value })
}
else {
$('#fooTable').data("kendoGrid").dataSource.filter([]);
}
}
}
});
</script>
这是工作,因为我想它的工作,但如果有一个更好的方法,请让我知道在评论,我会更新这个答案/删除它。
这是另一个我觉得很重要的选项-
另一个选项由:https://stackoverflow.com/users/2293059/stevechapman
我建议指定数据源上可用的.Data(string handler)
方法,例如
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read
.Action("GetBuilders", "Builders", new { Area = "Administrator", active = true })
.Data("getDataParams")
)
)
这允许您指定一个javascript函数,该函数返回一个JSON对象,定义附加到ajax请求的附加参数。
你可以这样写:
var getDataParams = function (e) {
var result = {
name: $('#fooNameInput').val()
}
return result;
};
并触发网格的刷新(从键向上事件或类似的):
$("#fooTable").data("kendoGrid").dataSource.read();
一些文档的帮助:
剑道论坛工作示例
MVC Fluent docs