1

我正在使用实体框架开发一个 Asp.net MVC3 应用程序。我使用 Knockoutjs 进行绑定,使用 KendoUI 作为视图的 UI 部分。我能够实现大部分 KendoUi 小部件,但现在我需要使用从 SQL 服务器获取数据的 KendoUI 网格控件。据我了解,网格小部件适用于 XML 或 JSON。

所以我有一个数据库上下文:

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
                            }

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

4

1 回答 1

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;
        }

这是剑道网格代码:

$(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"
                            }
                        ]
            });
        });
于 2012-06-22T12:31:08.360 回答