2012-10-29 71 views
3

我試圖使用Infragistics的網格來顯示我的數據庫中的項目列表。我在帶有Razor引擎的MVC應用程序中使用實體框架中的代碼優先方法。除了Infragistics網格之外,每個視圖都可以在視圖中正常工作。Infragistics網格的GET返回空響應

這裏是我的家的觀點:

@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()); 
} 

使用螢火蟲,我可以清楚地看到,請求與狀態代碼「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)告訴我我有無效的參數

在此先感謝。

回答

5

我想我有一個很好的主意,你爲什麼這樣做,也發生在我身上。

MVC包裝爲網格模型在服務器上處理數據的方式提供了默認值(將數據源序列化爲包含'記錄'數據和支持'元數據'的對象)。然而,如果你自己這樣做,因爲你沒有定義你自己的密鑰,你會被默認的關鍵字'記錄'用來過濾響應,因爲它不在那裏..你會得到'未定義'的數據到電網:)

所以解決方案:

  • 1)包裝你的反應,並定義使用網格的「ResponseDataKey」物業配套關鍵。我在暗示這一點,因爲據我所知,將回復包裝在單個對象中是一種很好的做法 - 認爲存在一些安全隱患。

  • 2)如果你不喜歡這樣做,只是想獲得它的工作現在然後設置「ResponseDataKey」空字符串(「」會做),這樣你的回答將被適當過濾(或而不是)。

在將網格直接綁定到視圖中的模型數據的第二部分 - 您正確地獲取錯誤,據我所知。 DataSource property明確聲明源必須實現IQueryable而不是IEnumerable。在那裏拍一個.AsQueryable(),並且應該也能正常工作。

讓我知道這是否有幫助:)

+1

我會將此標記爲第二個解決方案的答案。謝謝。但是,由於我班的虛擬屬性,序列化程序沒有完成他的工作:我使用DTO類來完成它的工作。 –

+1

序列化是一個單獨的問題,因爲默認的.NET真的只是DTO-s :)而且如果你使用MVC網格模型來綁定數據,它將使用這些。 到目前爲止,JSON.NET已經很好地處理了大部分事情,並且它的速度也更快,並且如果您正在生成數據響應,它非常合適。 –