在阅读了JQGrid控件之后,我决定在我的一个ASP.Net MVC 3 Web应用程序中使用它.
首先我跟随了Phil Haacks教程http://haacked.com/archive/2009/04/14/using-jquery-grid-with-asp.net-mvc.aspx,这一切都很好.然后我尝试在我的应用程序中实现类似的东西,唯一的区别是,我使用Linq To Entities.
我的View页面导入了所有的css和Jquery类,然后我有我的JavaScript函数和保存数据的表
<script type="text/javascript"> jQuery(document).ready(function () { jQuery("#list").jqGrid({ url: '/Home/LinqGridData/',datatype: 'json',mtype: 'GET',colNames: ['equipmentID','categoryTitle','title'],colModel: [ { name: 'equipmentID',index: 'equipmentID',width: 40,align: 'left' },{ name: 'categoryTitle',index: 'categoryTitle',{ name: 'title',index: 'title',width: 200,align: 'left'}],pager: jQuery('#pager'),width: 660,height: 'auto',rowNum: 10,rowList: [5,10,20,50],sortname: 'Id',sortorder: "desc",viewrecords: true,imgpath: '/scripts/themes/coffee/images',caption: 'My first grid' }); });
<h2>My Grid Data</h2> <table id="list" class="scroll" cellpadding="0" cellspacing="0"></table> <div id="pager" class="scroll" style="text-align:center;"></div>
然后在我的控制器中,我有以下方法,假设返回Json数据
public ActionResult LinqGridData(string sidx,string sord,int page,int rows) { AssetEntities context = new AssetEntities(); var query = from e in context.Equipments select e; var count = query.Count(); var result = new { total = 1,page = page,records = count,rows = (from e in query select new { id = e.equipmentID,cell = new string[] { e.equipmentID.ToString(),e.Category.categoryTitle,e.Department.title } }).ToArray() }; return Json(result,JsonRequestBehavior.AllowGet); }
LINQ to Entities does not recognize the method 'System.String ToString()' method
有谁知道如何解决这个错误?而且,我是以正确的方式做到这一点,还是我应该采用与Phil Haack解释不同的方式,因为他使用Linq到sql?
任何反馈都将非常感激.
谢谢伙计们.
解决方法
EF不支持ToString方法,您必须在没有ToString和格式的情况下检索数据
这应该工作
public ActionResult LinqGridData(string sidx,int rows) { AssetEntities context = new AssetEntities(); var query = from e in context.Equipments select e; var count = query.Count(); var result = new { total = 1,rows = query.Select(x => new { x.equipamentID,x.Category.categoryTitle,x.Department.title }) .ToList() // .AsEnumerable() whatever .Select(x => new { id = x.equipamentID,cell = new string[] { x.equipamentID.ToString(),x.categoryTitle,x.title }}) .ToArray(),}; return Json(result,JsonRequestBehavior.AllowGet); }