asp.net-mvc - KendoUI 网格 Ajax 绑定(bind)参数选择

标签 asp.net-mvc telerik kendo-ui kendo-grid

我的 ASP.NET MVC 应用程序有一个基本的 KendoUI 网格,它使用 ajax 绑定(bind)进行读取。我想增强这一点,以便使用网格上方的表单来帮助选择应在网格中显示的数据。这是一个标准的搜索表单,包含名字、姓氏、出生日期、客户来源等基本字段,并带有搜索按钮。当按下搜索按钮时,我想通过传递带有我上面引用的字段的搜索模型来强制网格从 Controller 获取满足条件的数据。

搜索表单包含在 _CustomerSearch 部分 View 中。

我之前已经使用 Telerik MVC 扩展实现了此类操作,方法是利用 OnDataBinding 客户端事件并更新其中的参数值,然后手动进行 Ajax 调用以获取数据。 KendoUI 似乎不会以同样的方式运行。

查看

@Html.Partial("_CustomerSearch", Model)
<hr>
@(Html.Kendo().Grid<ViewModels.CustomerModel>()    
    .Name("Grid")
    .Columns(columns =>
    {
        columns.Bound(p => p.Id).Hidden(true);
        columns.Bound(p => p.FirstName);
        columns.Bound(p => p.LastName);
        columns.Bound(p => p.DateOfBirth).Format("{0:MM/dd/yyyy}");
        columns.Bound(p => p.IsActive);
    })
    .Scrollable()
    .Filterable()
    .Sortable()
    .DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read.Action("_Search", "Customer"))
    )
)

Controller

public ActionResult _Search([DataSourceRequest]DataSourceRequest request)
{
    return Json(DataService.GetCustomers2().ToDataSourceResult(request));
}

我设想 Controller 看起来像这样,但找不到任何以这种方式实现的示例,这就是我需要帮助的地方。

public ActionResult _Search([DataSourceRequest]DataSourceRequest request, CustomerSearchModel customerSearchModel)
{
    return Json(DataService.GetCustomers2(customerSearchModel)
               .ToDataSourceResult(request));
}

最佳答案

如果您的要求可以通过内置过滤来解决,尼古拉斯的答案可能会起作用。但是,如果您的需求可以通过内置过滤来解决,为什么您要创建自定义搜索表单?

所以我想你有理由手动进行搜索,所以这就是我们在项目中的做法(所以也许有更简单的方法,但这仍然对我们有用):

Controller Action 正常:

public ActionResult _Search([DataSourceRequest]DataSourceRequest request, 
                            CustomerSearchModel customerSearchModel)
{
    return Json(DataService.GetCustomers2(customerSearchModel)
               .ToDataSourceResult(request));
}

下一步:您需要一个 JavaScript 函数来从搜索表单收集数据(JS 对象的属性名称应与 CustomerSearchModel 的属性名称匹配):

function getAdditionalData() {
    // Reserved property names
    // used by DataSourceRequest: sort, page, pageSize, group, filter
    return {
        FirstName: $("#FirstName").val(),
        LastName: $("#LastName").val(),
        //...
    };
}

然后您可以配置在每次读取时调用此函数:

.DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read.Action("_Search", "Customer")
                          .Data("getAdditionalData"))
    )

最后在按钮中单击,您只需要刷新网格即可:

$('#Grid').data('kendoGrid').dataSource.fetch();

关于asp.net-mvc - KendoUI 网格 Ajax 绑定(bind)参数选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15667418/

相关文章:

jquery - 为什么 CSS 突然不起作用,什么是\u200b?

html - 如何将数据属性添加到 Html.BeginForm

c# - MVC 和绑定(bind)到复选框列表

asp.net-mvc - 通过 HtmlHelper 创建动态 RadEditor

javascript - 如何更改 Kendo Chart 的背景图片?

asp.net-mvc - ASP.MVC db Find(),但带有非主键参数

c# - 如何将嵌套模型属性绑定(bind)到剑道网格列?

c# - 移至 DateTimePicker 中数据输入的后续日期部分

angularjs - 如何在 Angular 中正式使用 css 类

kendo-ui - 如何在 Kendo UI Grid 中设置弹出编辑的密码模式