EntityFrameworkを使用してAsp.netMVC3アプリケーションを開発しています。バインディングにはKnockoutjsを使用し、ビューのUI部分にはKendoUIを使用しています。ほとんどのKendoUiウィジェットを実装できましたが、SQLサーバーからデータを取得するKendoUIグリッドコントロールを使用する必要があります。私が理解している限り、グリッドウィジェットはXMLまたはJSONで動作します。
だから私はdbコンテキストを持っています:
public DbSet<FranchiseInfoDto> Franchises { get; set; }
ローカルのSQLサーバーのテーブルにいくつかのデータを保存し、コントローラーから取得してJsonにシリアル化して、ビューのグリッドwidjetに何らかの方法でバインドできるようにしました。
private OmegaDB db = new OmegaDB();
//
// GET: /Franchise/
public JsonNetResult Index()
{
JsonNetResult jsonNetResult = new JsonNetResult { Formatting = Formatting.Indented };
var franchises = db.Franchises.ToList();
jsonNetResult.Data = franchises;
return jsonNetResult;
}
シリアル化されたjsonデータは次の形式です:
[{ ParentId: 0, Title: "Deposit", Type: "link", Link: "http://www.abv.bg" }, { ParentId: 2, Title: "Cash", Type: "link", Link: "http://www.facebook.com"}];
KendoUIグリッドに関するドキュメントを読み、次のようなローカルデータにバインドすることができました。
var menus = [{ ParentId: 0, Title: "Deposit", Type: "link", Link: "http://www.abv.bg" }, { ParentId: 2, Title: "Cash", Type: "link", Link: "http://www.facebook.com"}];
var dataSource = new kendo.data.DataSource({
data: menus,
schema: {
model: {
fields: {
ParentId: { editable: true },
Title: { editable: true },
Type: { editable: true },
Link: { editable: true }
}
}
}
});
$("#grid").kendoGrid({
toolbar: ["create", "save", "cancel"],
columns: [
{
field: "ParentId",
title: "Id",
width: 50
},
{
field: "Title",
title: "Label",
width: 100
},
{
field: "Type",
title: "Type",
width: 100
},
{
field: "Link",
title: "Link"
}
],
dataSource: dataSource,
editable: true,
groupable: true,
scrollable: true,
sortable: true,
pageable: true
});
しかし、Jsonを返すインデックスコントローラーにバインドしようとしても成功しませんでした。私はこのようなことを試みました:
dataSource: {
type: "odata",
transport: {
read: "Franchise/Index" // this is my controller action //where I serialize the data coming from the local sql server to json
}
私はプログラミングにかなり慣れていないので、このアプローチが正しいかどうかわかりません。私のサンプルコードに基づいた例を含む提案は大歓迎です。ありがとう!