C# 使用会话变量在ASP.NET中分页记录
我正在ASP.NET MVC 4中创建分页,从数据库获取记录的方式是通过webservice,从webservice接收到记录后,我将其保存在会话变量中。但在我继续调用web服务之前,它将在会话中首先执行一个查询,如果查询返回值,我将不继续调用web服务,但如果查询返回null,它将继续调用web服务。这是我的密码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
[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
- 项目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);
}