3

Infragistics のグリッドを使用して、データベースからアイテムのリストを表示しようとしています。Razor エンジンを使用した MVC アプリケーションで、Entity Framework でコード ファースト メソッドを使用しています。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)、無効なパラメーターがあることを教えてくれます

前もって感謝します。

4

1 に答える 1

5

なぜあなたがこれを手に入れているのか、私にはかなり良い考えがあると思います.

MVC ラッパーは、グリッド モデルがサーバー上のデータを処理する方法のデフォルトを提供します (データの「レコード」とサポートする「メタデータ」を使用して、データ ソースをオブジェクトにシリアル化します)。ただし、独自のキーを定義していないために自分でそれを行うと、応答をフィルタリングするために使用されるデフォルトのキー「Records」に固執し、そこにないため、「未定義」のデータが供給されます。グリッドに:)

だから解決策:

  • 1) 応答をラップし、グリッドの「ResponseDataKey」プロパティを使用して一致するキーを定義します。私がこれを提案しているのは、覚えている限り、応答を単一のオブジェクトにラップすることは良い習慣だからです - セキュリティへの影響があったと思います.

  • 2)これを行う気がなく、今すぐ機能させたい場合、「ResponseDataKey」を空の文字列に設定します(「」で十分です)。これにより、応答が適切にフィルタリングされます(またはフィルタリングされません)。

グリッドをビュー内のモデル データに直接バインドする 2 番目の部分では、私が見る限り、正しくエラーが発生しています。DataSource プロパティは、ソースが IEnumerable ではなく IQueryable を実装する必要があることを明示的に示しています。そこに .AsQueryable() を平手打ちすると、それもうまくいくはずです。

これが役立つかどうか教えてください:)

于 2012-10-31T09:23:02.370 に答える