SlickGrid不在MVC应用程序中显示SQL数据

时间:2016-08-23 21:24:10

标签: asp.net-mvc slickgrid

StackOverflow上的

This post描述了一个问题,即来自SQL的数据未在MVC应用程序的SlickGrid中显示。我有相同的问题。当我导航到www.example.com/aqi/Products/Index时,会显示SlickGrid,但不显示SQL中article_creator列的数据。

enter image description here

“Web检查器网络”选项卡显示应该出现在SlickGrid中的SQL的article_creator列中的数据。在这个例子中,文本"测试"应该出现在SlickGrid中。

enter image description here

在另一篇文章中,解决方案是检查Web Inspector控制台是否有错误。我的浏览器Web Inspector控制台没有错误,因此我不确定下一步该做什么。

enter image description here

控制器/ AppController.cs

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using aqi.Models;

namespace aqi.Controllers
{
    public class ProductsController : Controller
    {

        public ActionResult Index()
        {
            return View(db.Products.ToList());
        }

        public JsonResult GetSlickGridData()
        {
            var slickGridData = db.Products.ToList();
            var jsonResult = Json(slickGridData, JsonRequestBehavior.AllowGet);
            jsonResult.MaxJsonLength = int.MaxValue;
            return jsonResult;
        }
    }
}

脚本/ SlickGridProducts.js

var grid;
var columns = [
    { id: "article_creator", name: "article_creator", field: "article_creator", width: 100 }
];
var options = {
    editable: true,
    enableAddRow: true,
    enableCellNavigation: true,
    asyncEditorLoading: false,
    autoEdit: false
};

$(function () {
    var slickdata = [];
    $.getJSON("/aqi/Products/GetSlickGridData", function (items) {
        for (var i = 0; i < items.length; i++) {
            slickdata[i] = {
                article_creator: items[i].article_creator
            };
        }
    });

    grid = new Slick.Grid("#myGrid", slickdata, columns, options);
})

查看/产品/ Index.cshtml

<link href="@Url.Content("~/Content/slick.grid.css")" rel="stylesheet" type="text/css" />
<link href="@Url.Content("~/Content/smoothness/jquery-ui-1.8.16.custom.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/slick.core.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/slick.grid.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-1.10.2.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/SlickGridProducts.js")" type="text/javascript"></script>

<div id="myGrid"></div>

1 个答案:

答案 0 :(得分:2)

您需要将网格初始化放在$.getJSON回调中,因为它是异步的。 e.g。

$(function () {
    var slickdata = [];
    $.getJSON("/aqi/Products/GetSlickGridData", function (items) {
        for (var i = 0; i < items.length; i++) {
            slickdata[i] = {
                article_creator: items[i].article_creator
            };
        }
       grid = new Slick.Grid("#myGrid", slickdata, columns, options);
    });
})

或者,如果您想事先显示没有数据的网格,并在提取数据后稍后刷新,那么。

$(function () {
    var slickdata = [];
    grid = new Slick.Grid("#myGrid", slickdata, columns, options);

    $.getJSON("/aqi/Products/GetSlickGridData", function (items) {
        for (var i = 0; i < items.length; i++) {
            slickdata[i] = {
                article_creator: items[i].article_creator
            };
        }
        //set the new data here and invalidate the grid
        grid.setData(slickdata);
        grid.invalidate();
    });
})

注意:我刚注意到图像中有2个空行。自设置enableAddRow:true以来,我认为1来自有效的数组项而另一个是新行。只有在列field属性`或不正确的数据集上存在拼写错误时才会出现这种情况。