2017-06-13 106 views
0

我想實現服務器端分頁錯開我想加載到瀏覽器的一些數據的加載。這是我的控制器的動作是什麼樣子:在ASP.NET核心服務器端分頁

[Route("api/meteorites")] 
[HttpGet] 
public IActionResult GetAll() 
    { 
     var meteories = _context.Meteorites.ToList(); 
     var js = new JavaScriptSerializer {MaxJsonLength = Int32.MaxValue}; 
     return new ObjectResult(js.Serialize(meteories)); 
    } 

這是我的Ajax請求的樣子:

var promiseWrapper = (xhr, d) => new Promise(resolve => xhr(d, (p) => resolve(p))); 
Promise.all([ 
    promiseWrapper(d3.json, "StaticFiles/world.geojson"), 
    promiseWrapper(d3.json, "api/meteorites") 
]).then(resolve => { 
    // Set a timer up here to ask for 500 meteorites every ten seconds 
     // In your controller action, you are going to need pagination 
}); 

請注意,我還使用D3.js(如果有差別)。 感謝您提前幫助!

回答

0

我能夠通過更新我的控制器下面來解決我的問題:

[Route("api/meteorites")] 
    [HttpGet] 
    public IActionResult GetAll(int pageNumber, int pageSize) 
    { 
     var meteories = _context.Meteorites.OrderBy(x => x.Id).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList(); 
     var js = new JavaScriptSerializer {MaxJsonLength = Int32.MaxValue}; 
     return new ObjectResult(js.Serialize(meteories)); 
    } 

和更新我的Ajax調用如下:

var promiseWrapper = (xhr, d) => new Promise(resolve => xhr(d, (p) => resolve(p))); 
var pageNumber = 1; 
Promise.all([ 
    promiseWrapper(d3.json, "StaticFiles/world.geojson"), 
    promiseWrapper(d3.json, "api/meteorites?pageNumber=1&pageSize=100") 
]).then(resolve => { 
    window.setInterval(() => { 
     $.ajax({ 
      url: `api/meteorites?pageNumber=${pageNumber++}&pageSize=100`, 
      dataType: "json", 
      method: "GET" 
     }).done((d) => { 
      // Do something with data 
     }); 
    }, 1000); 
});