0

我在 ASP.NET MVC 4 中创建了一个分页,我从数据库获取记录的方式是通过 web 服务,在从 web 服务接收到记录后,我将它保存在我的会话变量中。但是在我继续调用 Web 服务之前,它将首先在我的会话中执行一个查询,如果查询返回一个值,我将不会继续调用 Web 服务,但如果查询返回null,它将继续调用 Web 服务。这是我的代码。

[HttpPost]
public ActionResult Getitems(int take,int skip)
{
  var check = ((List<Records>)Session["tempRecord"])
               .Orderby(item => item.ID)
               .Skip(skip)
               .Take(take).ToList();

  if (check.count == 0)
  {
        //code for calling a webservice
        string Result = ServiceCaller.Invoke("Record/getRecord?skip=" + skip + "&take=" + take,"POST","Application/Json");
        List<Records> ListResult = JsonHelper.Deserialize<List<Records>>(Result);            

        //code for appending result in the session
        ((List<Records>)Session["tempRecord"]).addRange(ListResult);
        return Json(ListResult);
  }
  else
  {
        return Json(Check);
  }
}

现在,问题来了。页面加载时,当前值为 session 为初始值,但当用户首先点击更高的页码时,会继续执行上面的代码,但由于check变量返回 0 计数(因为它仍然有初始值) value),它将调用 Web 服务并添加会话。然后,当用户点击低于他/她点击的第一页的页面时,它已经返回相同的值,因为正在查询的会话已经有一个值。

例如,您的表中共有 5 条记录(item1、item2、item3、item4、item5)。

每页是 1 条记录,会话的初始值为 (item1) 所以这就是它的样子

  • 项目1

| 1 | 2 | 3 | 4 | 5 |

当用户单击页面“4”时,它看起来像这样,会话的当前值将像这样(item1,item4)

  • 第 4 项

| 1 | 2 | 3 | 4 | 5 |

但是当用户点击低于页面“4”的页面时,输出仍然是相同的“ item4 ”,但是当用户点击高于页面“4”时它工作正常。

有什么建议吗???

4

1 回答 1

2

所以如果我做对了,你就有了类似gridview的东西。带分页?如果是这样,您为什么不只发送页码?为什么是 2 个变量?

你不能发送页码然后做这样的事情:

public ActionResult GetItems(int page){

var numberitems = 10;
var skip = page * numberitems;
var take = skip+numberitems;

    //code for calling a webservice
    string Result = ServiceCaller.Invoke("Record/getRecord?skip=" + skip + "&take=" + take,"POST","Application/Json");
    List<Records> ListResult = JsonHelper.Deserialize<List<Records>>(Result);            

    //code for appending result in the session
    ((List<Records>)Session["tempRecord"]).addRange(ListResult);
    return Json(ListResult);
}

从您的视图中获取并跳过似乎有点奇怪......

编辑:

public ActionResult GetItems(int page){
   var numberitems = 10;
   var skip = page * numberitems;
   var take = skip+numberitems;
if(Session["PageID"] == null || Session["cacheRecord"] == null){
   //code for calling a webservice
   string Result = ServiceCaller.Invoke("Record/getRecord?skip=" + skip + "&take=" + take,"POST","Application/Json");
   List<Records> ListResult = JsonHelper.Deserialize<List<Records>>(Result);            

   //code for appending result in the session
   ((List<Records>)Session["cacheRecord"]).addRange(ListResult);
   Session["PageID"] = page;
   return Json(ListResult);
 }else{
if(Session["PageID"] == page){
      var result = ((List<Records>)Session["tempRecord"])
           .Orderby(item => item.ID)
           .Skip(skip)
           .Take(take).ToList();
      return Json(result);
    }else{
   Session["PageID"] = page;
       string Result = ServiceCaller.Invoke("Record/getRecord?skip=" + skip + "&take=" + take,"POST","Application/Json");
       List<Records> ListResult = JsonHelper.Deserialize<List<Records>>(Result);            

       //code for appending result in the session
       ((List<Records>)Session["tempRecord"]).addRange(ListResult);
  return Json(ListResult);

}

}

于 2012-11-09T10:02:04.723 回答