使用Entity Framework将KendoUI绑定到Sql数据

时间:2012-06-22 08:32:38

标签: kendo-ui asp.net-mvc

我正在使用Entity Framework开发Asp.net MVC3应用程序。我正在使用Knockoutjs进行绑定,并使用KendoUI作为视图的UI部分。我能够实现大多数KendoUi小部件,但现在我需要使用KendoUI网格控件从SQL服务器获取其数据。据我所知,网格小部件可以使用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 Grid的文档,并能够将其绑定到这样的本地数据:

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的Index控制器时,我没有成功。我试过这样的事情:

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
                            }

我对编程很新,我不确定这种方法是否正确。任何基于我的示例代码的示例的建议将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

我设法用数据库中的序列化数据填充网格到json。这是返回json数据的控制器代码:

public ActionResult SampleData()
        {
            JsonNetResult jsonNetResult = new JsonNetResult { Formatting = Formatting.Indented };
            var f1 = new FranchiseInfoSampleData();
            f1.ParentId = 0;
            f1.Title = "Deposit";
            f1.Type = "functionality";
            f1.Link = "http://www.abv.bg";

            var f2 = new FranchiseInfoSampleData();
            f2.ParentId = 1;
            f2.Title = "Cash Out";
            f2.Type = "link";
            f2.Link = "www.abv.bg";

            List<FranchiseInfoSampleData> sampleData = new List<FranchiseInfoSampleData>();
            sampleData.Add(f1);
            sampleData.Add(f2);

            jsonNetResult.Data = sampleData;
            return jsonNetResult;
        }

这是Kendo Grid代码:

$(document).ready(function () {
            $("#grid").kendoGrid({
                dataSource: {
                    transport: {
                        read: {
                            url: "Home/SampleData",
                            dataType: "json"
                        }
                    },
                    schema: {
                        model: {
                            fields: {
                                ParentId: { editable: true },
                                Title: { type: "string", editable: true },
                                Type: { type: "string", editable: true },
                                Link: { type: "string", editable: true }
                            }
                        }
                    },
                    pageSize: 10,
                    serverPaging: true,
                    serverFiltering: true,
                    serverSorting: true
                },
                height: 250,
                filterable: true,
                sortable: true,
                pageable: true,
                columns: [{
                    field: "ParentId",
                    filterable: false
                },
                            {
                                field: "Title",
                                width: 100
                            }, {
                                field: "Type",
                                width: 200
                            }, {
                                field: "Link"
                            }
                        ]
            });
        });