C# 使用会话变量在ASP.NET中分页记录

C# 使用会话变量在ASP.NET中分页记录,c#,asp.net-mvc,pagination,C#,Asp.net Mvc,Pagination,我正在ASP.NET MVC 4中创建分页,从数据库获取记录的方式是通过webservice,从webservice接收到记录后,我将其保存在会话变量中。但在我继续调用web服务之前,它将在会话中首先执行一个查询,如果查询返回值,我将不继续调用web服务,但如果查询返回null,它将继续调用web服务。这是我的密码 [HttpPost] public ActionResult Getitems(int take,int skip) { var check = ((List<Record

我正在ASP.NET MVC 4中创建分页,从数据库获取记录的方式是通过webservice,从webservice接收到记录后,我将其保存在会话变量中。但在我继续调用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);
  }
}
[HttpPost]
公共操作结果Getitems(int take,int skip)
{
变量检查=((列表)会话[“tempRecord”])
.Orderby(item=>item.ID)
.Skip(Skip)
.Take(Take.ToList();
如果(check.count==0)
{
//用于调用Web服务的代码
字符串结果=ServiceCaller.Invoke(“记录/getRecord?跳过=“+skip+”&take=“+take”,“POST”,“应用程序/Json”);
List ListResult=JsonHelper.Deserialize(结果);
//用于在会话中追加结果的代码
((列表)会话[“tempRecord”]).addRange(ListResult);
返回Json(ListResult);
}
其他的
{
返回Json(检查);
}
}
现在,问题来了。当页面加载时,当前值是会话是初始值,但是当用户首先单击更高的页码时,它将继续上面的代码,但是由于check变量返回0 count(因为它仍然具有初始值),它将调用web服务并添加会话。然后,当用户单击低于他/她单击的第一个页面的页面时,它已经返回相同的值,因为正在查询的会话已经有一个值

范例 表中总共有5条记录(item1、item2、item3、item4、item5)

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

  • 项目1
|1| 2 | 3 | 4 | 5|

当用户单击页面“4”时,它将如下所示,会话的当前值将如下所示(item1,item4)

  • 项目4
|1 | 2 | 3 |45|

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


有什么建议吗?

如果我没弄错的话,你会得到一个类似gridview的东西。有传呼吗? 如果是这样的话,你为什么不发送页码呢?为什么是两个变量

您不能发送页码,然后执行以下操作:

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页){
var numberitems=10;
var skip=页码*编号;
var take=跳过+数字项;
//用于调用Web服务的代码
字符串结果=ServiceCaller.Invoke(“记录/getRecord?跳过=“+skip+”&take=“+take”,“POST”,“应用程序/Json”);
List ListResult=JsonHelper.Deserialize(结果);
//用于在会话中追加结果的代码
((列表)会话[“tempRecord”]).addRange(ListResult);
返回Json(ListResult);
}
从你的角度来看,似乎有点奇怪

编辑:

public ActionResult GetItems(int页){
var numberitems=10;
var skip=页码*编号;
var take=跳过+数字项;
如果(会话[“PageID”]==null | |会话[“cacheRecord”]==null){
//用于调用Web服务的代码
字符串结果=ServiceCaller.Invoke(“记录/getRecord?跳过=“+skip+”&take=“+take”,“POST”,“应用程序/Json”);
List ListResult=JsonHelper.Deserialize(结果);
//用于在会话中追加结果的代码
((列表)会话[“cacheRecord”]).addRange(ListResult);
会话[“PageID”]=页面;
返回Json(ListResult);
}否则{
如果(会话[“PageID”]==页面){
var结果=((列表)会话[“tempRecord”])
.Orderby(item=>item.ID)
.Skip(Skip)
.Take(Take.ToList();
返回Json(结果);
}否则{
会话[“PageID”]=页面;
字符串结果=ServiceCaller.Invoke(“记录/getRecord?跳过=“+skip+”&take=“+take”,“POST”,“应用程序/Json”);
List ListResult=JsonHelper.Deserialize(结果);
//用于在会话中追加结果的代码
((列表)会话[“tempRecord”]).addRange(ListResult);
返回Json(ListResult);
}

}

我需要你们的帮助。嗨,谢谢你们的回复。但在我们的例子中,我们尽可能使用会话作为记录的临时持有者,以避免在用户刷新页面时调用服务。在您的示例代码中。每次用户调用GetItem操作时,它都会调用服务,因此会话变量正在忽略。但感谢您的答复。请使用会话[“pageID”]和会话[“cacheRecord”]?如果(会话[“pageID”]==page){//返回我的会话信息}否则{//获取页面}并检查是否设置了pageID和cacheRecord。
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);

}