Infragistics网格的GET返回空响应

Tit*_* D. 3 asp.net-mvc infragistics razor ignite-ui iggrid

我正在尝试使用Infragistics的网格来显示我的数据库中的项目列表.我正在使用带有Razor引擎的MVC应用程序中的实体框架的代码优先方法.除了Infragistics网格之外,视图中的每个东西都能正常工作.

这是我的家庭观点:

@using Infragistics.Web.Mvc
@model IEnumerable<BusinessModel.Models.TestPlan>

@{
    ViewBag.Title = "Home";
}

@( Html.Infragistics().Grid<BusinessModel.Models.TestPlan>(Model)
.AutoGenerateColumns(true)
.DataSourceUrl(Url.Action("igListTestPlan"))
.DataBind()
.Render())
Run Code Online (Sandbox Code Playgroud)

这是我的控制器:

[GridDataSourceAction]
public ActionResult igListTestPlan()
{
    return View(service.getListTestPlan());
}
Run Code Online (Sandbox Code Playgroud)

使用firebug我可以清楚地看到请求是以状态代码"200 OK"发送的,但响应选项卡是空的.它还会导致控制台出错(在infragistics.js中):

Uncaught TypeError: Cannot read property 'length' of undefined 
Run Code Online (Sandbox Code Playgroud)

我想这是因为空的反应.

我尝试了什么:

调试我的控制器显示我return View(service.getListTestPlan());没有返回一个空列表:我有3个有效的项目.

我也试过Html.Infragistics().Grid<BusinessModel.Models.TestPlan>(Model__.ToList())但没有改变.还Html.Infragistics().Grid(Model)告诉我我的参数无效

提前致谢.

Dam*_*tev 5

我想我很清楚你为什么会这样,也发生在我身上.

MVC包装器提供网格模型处理服务器上数据的方式的默认值(将数据源序列化为具有"数据记录"和支持"元数据"的对象).但是,如果你自己这样做,因为你没有定义自己的密钥,你就会遇到一个默认密钥'Records',用于过滤响应,因为它不在那里.你得到'未定义'数据馈送到网格:)

解决方案:

  • 1)使用网格的"ResponseDataKey"属性包装您的响应并定义匹配键.我建议这样做,因为据我所知,将响应包装在一个对象中是一种很好的做法 - 认为存在一些安全隐患.

  • 2)如果您不想这样做并且只是想让它现在正常工作,那么将"ResponseDataKey"设置为空字符串(""将执行),这样您的响应将被正确过滤(或者更确切地说不是).

在将网格直接绑定到视图中的模型数据的第二部分 - 就我所见,您正确地得到了错误.该DataSource属性明确规定源必须实现IQueryable的,而不是IEnumerable的.在那里打一个.AsQueryable(),这应该也可以正常工作.

如果这有帮助,请告诉我:)