前台使用Extjs 后台用返回 json数据 返回数据过去 进行 分页 为什么只能显示加载完 点击下一页后就没有了数据。
后台代码
1 public JsonResult select(int start, int limit) 2 { 3 4 var json = new 5 { 6 results = db.tb_Emp.Count(), 7 rows =db.tb_Emp.OrderBy(x=>x.EmpID).Take(limit).Skip(start).Select(x=>new 8 { 9 EmpID=x.EmpID 10 }) 11 12 }; 13 return Json(json, JsonRequestBehavior.AllowGet);
前台代码
Ext.define('MyData', {
extend: 'Ext.data.Model',
fields: [
{ name: 'EmpID', mapping: 'EmpID' },
{ name: 'EmpName', mapping: 'EmpName' },
{ name: 'EmpLoginPwd', mapping: 'EmpLoginPwd' },
{ name: 'EmpSex', mapping: 'EmpSex' },
{ name: 'EmpBirthday', dateFormat: "Y-m-dTH:i:s", mapping: 'EmpBirthday' },
{ name: 'EmpDept', mapping: 'EmpDept' },
{ name: 'EmpPhone', mapping: 'EmpPhone' },
{ name: 'EmpPhoneM', mapping: 'EmpPhoneM' },
{ name: 'EmpAddress', mapping: 'EmpAddress' }
]
});
//创建数据源 var store = Ext.create('Ext.data.Store', { model: 'MyData', pageSize: 2,//对应limit proxy: { type: 'ajax', url: '../Information/select', reader: { type: 'json', //root: 'root', root:'rows', totalProperty: 'results' } }, autoLoad: true }); //grid 里面的分页控件 bbar: [{ xtype: 'pagingtoolbar', store: store, displayMsg: '显示 {0} - {1} 条,共计 {2} 条', emptyMsg: "没有数据", beforePageText: "当前页", afterPageText: "共{0}页", displayInfo: true, //pagesize:5 }],
对于这种前后台的问题。调错的第一原则是找出是哪一边的错。客户端,还是服务器。
1、你可以直接将URL直接打在浏览器地址栏上,看看返回什么样的结果。
类似http://www.yoursite.com/information/select?start=2&limit=10这样,看看是不是你想要的结果。
2、掌握WEB开发调试技巧,有个键你需要知道,F12,你可以查看客户端发出的以及服务端返回的数据。
服务器问题。。点了下一页时候 他数据就没了.. 但是不知道怎么去解决。
第一次加载时候 后台json 里面 rows 结果视图是
- 结果视图 展开“结果视图”时将枚举 IEnumerable 里面是有数据 但是当点下一页时候 里面的Empty 就显示
Empty "枚举未生成任何结果" string了0.0
@Yamax: 可以通过SQL SERVER Profile跟踪EF或是LINQ TO SQL 发出的SQL查询语句,看看是哪儿出问题了,另外,你确认数据是够两页的吧。
或者通过LOG也可以将DataContext发出的SQL查询语句写在文本文件LOG中的。
@爱编程的大叔:
是这个么。。但是我看不出来。。
第一条 json加载时候是
{ results = 8, rows = {SELECT [Project1].[C1] AS [C1], [Project1].[EmpID] AS [EmpID]FROM ( SELECT [Project1].[EmpID] AS [EmpID], [Project1].[C1] AS [C1], row_number() OVER (ORDER BY [Project1].[EmpID] ASC) AS [row_number] FROM ( SELECT TOP (2) [Extent1].[EmpID] AS [EmpID], 1 AS [C1] FROM [dbo].[tb_Emp] AS [Extent1] ORDER BY [Extent1].[EmpID] ASC ) AS [Project1]) AS [Project1]WHERE [Project1].[row_number] > 2ORDER BY [Project1].[EmpID] ASC} }
点击后。
{ results = 8, rows = {SELECT [Project1].[C1] AS [C1], [Project1].[EmpID] AS [EmpID]FROM ( SELECT [Project1].[EmpID] AS [EmpID], [Project1].[C1] AS [C1], row_number() OVER (ORDER BY [Project1].[EmpID] ASC) AS [row_number] FROM ( SELECT TOP (2) [Extent1].[EmpID] AS [EmpID], 1 AS [C1] FROM [dbo].[tb_Emp] AS [Extent1] ORDER BY [Extent1].[EmpID] ASC ) AS [Project1]) AS [Project1]WHERE [Project1].[row_number] > 0ORDER BY [Project1].[EmpID] ASC} }
@Yamax: 你把那条语句放到SQL 查询里面执行看看啊。
@爱编程的大叔:
@爱编程的大叔:
> 2 ORDER BY 就不行了
> 0 ORDER BY 就可以了。。但 start 翻页后变了2后 我想 写成 除了 TOP 2之外的 后2条信息怎么写呢
- -
@Yamax: 我好象看出来了,
你那个db.tb_Emp.OrderBy(x=>x.EmpID).Take(limit).Skip(start)
应该把Skip放前面,然后再Take
@爱编程的大叔: 额 试了 OK了 谢谢了... 新手刚学linq。。和extjs 搞了 1天 谢谢你。