从字段中选择后绑定Kendo网格数据

时间:2018-07-03 11:39:39

标签: asp.net-mvc kendo-ui

我有一个屏幕,其中有一个Kendo grid。 我的年份是dropdown,如果选择年份,则网格将刷新相应的数据。

enter image description here

但是我选择一个日期后,返回的结果是JSon结果

enter image description here

我在这里想念什么?

这是网格:

@(Html.Kendo().Grid<GGISServices.Models.District.LotAutorizationSentDocumentsViewModel>()
    .Name("districtGrid")
    .HtmlAttributes(new { @class = "newGrid" })
    .Columns(columns =>
    {
        ....     
    })
    .Filterable(ftb => ftb.Mode(GridFilterMode.Row))
    .Events(e => e.FilterMenuInit("filterMenuInit"))
    .ColumnMenu(f => f.Enabled(true))
    .Pageable(pageable => pageable
        .Refresh(true)
        .Info(true)
        .PageSizes(new int[] { 5, 10, 25, 50, 100, 1000 })
        .ButtonCount(5)
        )
    .DataSource(dataSource => dataSource
        .Ajax()
        .Sort(sort => sort.Add(c => c.Id).Descending()) // <-- initial sort expression
        .Read(read => read.Action("GetData", "SentDocument", new { Area = GGISWeb.AreaModules.District }))
        .PageSize(25)
    )
    )

这是GetData中的controller方法:

public ActionResult GetData([DataSourceRequest]DataSourceRequest request, int year = 0)
    {
        var list = dsService.GetSentDocumentsAsQueryable(year);
        DataSourceResult result = list.ToDataSourceResult(request, x => x.ToViewModel());
        return new LargeJsonResult() { Data = result , JsonRequestBehavior = JsonRequestBehavior.AllowGet };
    }

这是一年中的onChange事件下拉列表:

$(document).ready(function () {
       $("#Year").on("change", function (e) {
           $("#gridDiv").load("@VirtualPathUtility.ToAbsolute("~/")District/SentDocument/GetData/?year=" + $(this).val(), function () {
              });
        });
    });

当我选择另一个日期时,将使用选定的年份调用GetData方法,但是我不知道如何绑定到网格。

2 个答案:

答案 0 :(得分:1)

尝试其他方法。使用.Data()方法表示一个javascript函数,该函数将返回其他字段以发送回服务器。将其添加到您在控制器上的读取动作中,您可以有条件地确定是否应遵守该规定。

<script>
function myFunc(){
return {selectedDate: $("#myDatePicker").data("kendoDatePicker").value()};
}</script>

然后,读取调用看起来像:

.Read(read => read.Action("GetData", "SentDocument", new { Area = GGISWeb.AreaModules.District }).Data("myFunc"))

然后添加DateTime吗?将selectedDate参数添加到您的控制器上。

您的网格能够收集获取数据所需的所有信息。您不必担心交换数据源。更改日期选择器(或可能要为网格条件添加的其他任何字段)后,只需调用网格的dataSource.read()方法即可获取最新信息。

答案 1 :(得分:1)

使用@Mark_Fitzpatrick方法可以工作,但是问题出在您的控制器从遇到类似问题而发回信息的方式上。网格期望返回一个DataSourceResult请求,并且您正在更改期望的模式。因此将您的控制器从:

245

这应该以网格期望的格式返回数据。如果数据很大,并且假设public ActionResult GetData([DataSourceRequest]DataSourceRequest request, int year = 0) { var list = dsService.GetSentDocumentsAsQueryable(year); DataSourceResult result = list.ToDataSourceResult(request, x => x.ToViewModel()); return new LargeJsonResult() { Data = result , JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } public ActionResult GetData([DataSourceRequest]DataSourceRequest request, int year = 0) { var list = dsService.GetSentDocumentsAsQueryable(year); return Json(list.ToDataSourceResult(request, ModelState),JsonRequestBehavior.AllowGet); } 是自定义返回对象,则只需返回LargeJsonResult,并为其分配最大长度设置即可。