我在 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”时它工作正常。
有什么建议吗???