Infragistics网格的GET返回空响应

时间:2012-10-29 12:45:06

标签: asp.net-mvc razor infragistics 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())

这是我的控制器:

[GridDataSourceAction]
public ActionResult igListTestPlan()
{
    return View(service.getListTestPlan());
}

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

Uncaught TypeError: Cannot read property 'length' of undefined 

我想这是因为空洞的回应。

我尝试了什么:

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

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

提前致谢。

1 个答案:

答案 0 :(得分:5)

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

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

所以解决方案:

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

  • 2)如果您不想这样做而只是想让它正常工作现在然后将“ResponseDataKey”设置为空字符串(“”将会这样做)所以您的回复将被正确过滤(或者更确切地说不是)。

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

请告诉我这是否有帮助:)