SlickGrid 未在 MVC 应用程序中显示 SQL 数据
SlickGrid not displaying SQL data in an MVC application
Whosebug 上的 This post 描述了一个问题,即来自 SQL 的数据未显示在 MVC 应用程序的 SlickGrid 中。我有同样的问题。当我导航到 www.example.com/aqi/Products/Index 时,SlickGrid 会显示,但 SQL 中 article_creator 列的数据不会出现。
Web Inspector 网络选项卡显示 SQL 中 article_creator 列中应显示在 SlickGrid 中的数据。在此示例中,文本 "Test" 应出现在 SlickGrid 中。
在另一个 post 中,解决方案是检查 Web Inspector 控制台是否有错误。我的浏览器 Web Inspector 控制台没有错误,所以我不确定下一步该怎么做。
Controllers/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;
}
}
}
Scripts/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);
})
View/Products/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>
您需要将网格初始化放在 $.getJSON
回调中,因为它是异步的。例如
$(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 个空行。我相信 1 来自有效的数组项,另一个来自新行,因为您设置了 enableAddRow:true
。仅当您在 field
属性` 列或数据集不正确时才会出现这种情况。
This post 描述了一个问题,即来自 SQL 的数据未显示在 MVC 应用程序的 SlickGrid 中。我有同样的问题。当我导航到 www.example.com/aqi/Products/Index 时,SlickGrid 会显示,但 SQL 中 article_creator 列的数据不会出现。
Web Inspector 网络选项卡显示 SQL 中 article_creator 列中应显示在 SlickGrid 中的数据。在此示例中,文本 "Test" 应出现在 SlickGrid 中。
在另一个 post 中,解决方案是检查 Web Inspector 控制台是否有错误。我的浏览器 Web Inspector 控制台没有错误,所以我不确定下一步该怎么做。
Controllers/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;
}
}
}
Scripts/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);
})
View/Products/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>
您需要将网格初始化放在 $.getJSON
回调中,因为它是异步的。例如
$(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 个空行。我相信 1 来自有效的数组项,另一个来自新行,因为您设置了 enableAddRow:true
。仅当您在 field
属性` 列或数据集不正确时才会出现这种情况。