【问题标题】:Infragistics grid's GET returning empty responseInfragistics 网格的 GET 返回空响应
【发布时间】:2012-10-18 18:48:28
【问题描述】:

我正在尝试使用 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&lt;BusinessModel.Models.TestPlan&gt;(Model__.ToList()),但没有任何改变。另外Html.Infragistics().Grid(Model) 告诉我我的参数无效

提前致谢。

【问题讨论】:

    标签: asp.net-mvc razor infragistics ignite-ui iggrid


    【解决方案1】:

    我想我很清楚你为什么会得到这个,我也发生了这种情况。

    MVC 包装器为网格模型处理服务器上的数据的方式提供默认值(将数据源序列化为具有数据“记录”和支持“元数据”的对象)。但是,如果您自己这样做,因为您没有定义自己的键,那么您将被用于过滤响应的默认键“记录”卡住,并且因为它不存在......好吧,您会得到“未定义”的数据到网格:)

    所以解决方案:

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

    • 2) 如果您不想这样做并且只想让它工作现在然后将“ResponseDataKey”设置为空字符串(“”可以)所以你的回应将被正确过滤(或者不被过滤)。

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

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

    【讨论】:

    • 我会将此标记为答案,因为第二个解决方案有效。谢谢。但是,由于我的类中的虚拟属性,序列化程序没有完成他的工作:我使用 DTO 类让它工作。
    • 可悲的是,序列化是一个单独的问题,因为默认的 .NET 确实只像 DTO-s :) 如果您使用 MVC 网格模型绑定到数据,它将使用这些。到目前为止,对我来说,JSON.NET 已经很好地处理了大多数事情,而且它也更快,并且如果您正在生成数据响应,它非常适合。
    猜你喜欢
    • 2022-10-25
    • 2012-05-14
    • 2016-11-28
    • 2020-11-12
    • 2013-11-28
    • 1970-01-01
    • 2020-01-18
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多