【问题标题】:Kendo Grid unable to populate viewKendo Grid 无法填充视图
【发布时间】:2014-06-11 21:55:11
【问题描述】:

我正在尝试用我的数据库中的数据填充剑道 ui 网格。我无法找到所有其他具有相同问题的帖子的答案。用户使用 UserId 和 To/From 日期进行搜索。使用断点我可以看到通过控制器返回的数据。第一次使用剑道,如果我需要发布更多信息,请告诉我

错误信息

Compiler Error Message: CS1660: Cannot convert lambda expression to type 'string' because it is not a delegate type

Source Error:

Line 11:     .Columns(columns =>
Line 12:     {
Line 13:         columns.Bound(m => m.ActivityDate).Format("{0:MM/dd/yyyy}");
Line 14:         columns.Bound(m => m.Assignment);
Line 15:         columns.Bound(m => m.Action);

控制器

[HttpPost]
public ActionResult ReportsPhoneSupport(ReportsPhoneSupport model)
{       
    string[] userIds = model.UserId.Split(',');

    foreach (string userId in userIds)
    {
        int iUserId = 0;
        if (Int32.TryParse(userId, out iUserId))
        {
            ReportPhoneSupportResultTypedView results = new ReportPhoneSupportResultTypedView();
            RetrievalProcedures.FetchReportPhoneSupportResultTypedView(results, model.FromDate, model.ToDate, iUserId);
        }
    }

    return View(model);
}

查看

@{
    ViewBag.Title = "ReportsPhoneSupport";
 }

<h2>ReportsPhoneSupport</h2>

@(Html.Kendo().Grid<UtilityWebSite.Controllers.ReportsPhoneSupportController>()
    .Name("grid")
    .Columns(columns =>
    {
        columns.Bound(m => m.ActivityDate).Format("{0:MM/dd/yyyy}");
        columns.Bound(m => m.Assignment);
        columns.Bound(m => m.Action);
        columns.Bound(m => m.ToFrom);
        columns.Bound(m => m.Result);
        columns.Bound(m => m.Description);
    })
    .Pageable()
    .Sortable()
    .Scrollable()
    .Filterable()
    .HtmlAttributes(new { style = "height:430px;" })
    .DataSource(dataSource => dataSource
        .Ajax()
        .PageSize(20)
        .Read(read => read.Action("ReportsPhoneSupport", "ReportsPhoneSupport"))
    )
)

 public class ReportsPhoneSupport
{
    public string UserId { get; set; }
    public DateTime ToDate { get; set; }
    public DateTime FromDate { get; set; }

}

}

【问题讨论】:

  • 已经发布了一个答案,但如果你能给我一些关于你的模型类的信息,以及你想在读取时发生什么,就像在服务器过滤中一样,传递在网格等
  • 搜索结果带来2个结果。每个用户 ID 1 个
  • 希望我的扩展示例为您指明了正确的方向。

标签: c# asp.net-mvc lambda kendo-grid


【解决方案1】:

您需要将 Json 返回到网格而不是视图。

类似

Public jsonresult readData([DataSourceRequest] DataSourceRequest request, MyModel model)
{
 Do something here to get data for source
 Eg List<MyReturnedModel> returnModel = new List<MyReturnedModel>()
 { new MyReturnedModel(){ id = 1}, (etc)
  };

Return json(returnedModel.ToDataSourceResult(request,ModelState), jsonbehaviour.Get);
}

希望这会给你足够的想法来运行。

编辑:

我还注意到您将控制器类设置为网格实体,而它应该是您的模型类。

第二次编辑:

好的,如果我有这个权利,那么网格上显示的实际数据应该是 ReportPhoneSupportResultTypedView

类型

所以如果你先把网格改成这样:

@(Html.Kendo().Grid<**ReportPhoneSupportResultTypedView**>()
 (include any namespaces here for the model type to be referenced correctly.)
 .Name("grid")
.Columns(columns =>
{
    columns.Bound(m => m.ActivityDate).Format("{0:MM/dd/yyyy}");
    columns.Bound(m => m.Assignment);
    columns.Bound(m => m.Action);
    columns.Bound(m => m.ToFrom);
    columns.Bound(m => m.Result);
    columns.Bound(m => m.Description);
})
.Pageable()
.Sortable()
.Scrollable()
.Filterable()
.HtmlAttributes(new { style = "height:430px;" })
.DataSource(dataSource => dataSource
    .Ajax()
    .PageSize(20)
    .ServerOperations(true)
   .Read(read => read.Action("ReportsPhoneSupport", "ReportsPhoneSupport").Data("MyFilters"))
)

)

您会注意到我在您的阅读操作后添加了 .Data 并使用一些 javascript 您可以添加您的搜索参数

所以是这样的:

<script>
function MyFilters()
{
     return { filterModel: {   
                               UserId: 1,
                               ToDate: "01 Jan 2014",
                               FromDate: "20 Jan 2014"
                            }
            };
}
</script>

这应该构造你传回的模型对象来执行你的过滤,然后将你的读取操作更改为如下所示:

注意确保您将命名空间 Kendo.Mvc.Extensions 和 Kendo.Mvc.UI 包含在控制器中,以便正确获取 DataSourceRequest/toDataSourceResult。

public JsonResult ReportsPhoneSupport([DataSourceRequest] DataSourceRequest request,ReportsPhoneSupport filterModel )
{       
   string[] userIds = filterModel.UserId.Split(',');

foreach (string userId in userIds)
{
    int iUserId = 0;
    if (Int32.TryParse(userId, out iUserId))
    {
        ReportPhoneSupportResultTypedView results = new ReportPhoneSupportResultTypedView();
        RetrievalProcedures.FetchReportPhoneSupportResultTypedView(results, filterModel.FromDate, filterModel.ToDate, iUserId);
    }
}
  **I am assuming your results set is some form of enumerable/IList**
return Json( results.toDataSourceResult(request,ModelState), jsonbehaviour.AllowGet);

}

希望这个扩展的示例能够为您提供您正在寻找的答案。

【讨论】:

  • 帮助很大!谢谢。但是我在返回时收到此消息 Json(results.toDataSourceResult(request, ModelState), JsonRequestBehavior.AllowGet);当前上下文中不存在名称“结果”
  • 需要在 foreach 循环之外设置结果初始化,然后这应该可以工作。所以更多的是第一行 ReportPhoneSupportResultTypedView results = new ReportPhoneSupportResultTypedView();退出 foreach 循环。
  • 解决了这个问题。但是,当我搜索结果时,在序列化类型对象时检测到循环引用。分页不会解决这个问题吗?
  • 如果这个对象是从像 EF 或 Data Access 这样的 ORM 中提取的,那么你需要展示一个扁平化的视图模型,它在这个链接中进行了解释:docs.telerik.com/kendo-ui/getting-started/using-kendo-with/…?
  • 没问题。当我开始使用 kendo MVC 包装器时,我遇到了类似的问题。
猜你喜欢
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-13
  • 1970-01-01
相关资源
最近更新 更多