0

JQueryを使用して$ajax呼び出しを介して無限のスクロールページングのデータを取得するASP.NETMVC3アプリケーションでページングされたデータセットをプルしています。バックエンドはAzureSQLデータベースです。コードは次のとおりです。

[Authorize]
[OutputCache(Duration=0,NoStore=true)]
public PartialViewResult Search(int page = 1)
{ 

      int batch = 10; 
      int fromRecord = 1; 
      int toRecord = batch;

      if (page != 1)
      {
         //note these are correctly passed and set
         toRecord = (batch * page);
         fromRecord = (toRecord - (batch - 1));

      }

IQueryable<TheTable> query;

query = context.TheTable.Where(m => m.Username==HttpContext.User.Identity.Name)        
.OrderByDescending(d => d.CreatedOn)
.Skip(fromRecord).Take(toRecord);

//this should always be the batch size (10)
//but seems to concatenate the previous results ???

int count = query.ToList().Count();

//results
//call #1, count = 10
//call #2, count = 20
//call #3, count = 30
//etc...


PartialViewResult newPartialView = PartialView("Dashboard/_DataList", query.ToList());
return newPartialView;

 }

Jquery $ ajaxからの各呼び出しから返されるデータは、呼び出しごとに10レコードだけを返すのではなく、後続の各呼び出しで成長し続けます。したがって、返される結果には、以前のすべての呼び出しデータも含まれます。また、$ajax呼び出しにも「cache=false」を追加しました。ここで何がうまくいかないかについてのアイデアはありますか?

4

1 に答える 1

0

渡した値SkipTake間違っている値。

  • の引数Skipは、スキップするレコードの数である必要があります。これは0、最初のページにある必要があります。

  • の引数はTake、返すレコードの数である必要があります。これは常にbatch;に等しくなります。

コードは次のようにする必要があります。

int batch = 10; 
int fromRecord = 0; 
int toRecord = batch;

if (page != 1)
{
   fromRecord = batch * (page - 1);
}
于 2013-03-18T19:01:37.167 に答える