ASP.NET MVC 4でページ付けを作成しています。データベースからレコードを取得する方法は、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);
}
}
さて、ここに問題があります。ページが読み込まれると、現在の値はセッションが初期値になりますが、ユーザーが最初に大きいページ番号をクリックすると、上記のコードに進みますが、チェック変数は0カウントを返すため(まだ初期値が残っているため)値)、Webサービスを呼び出し、セッションを追加します。次に、ユーザーが最初にクリックしたページより下のページをクリックすると、クエリ中のセッションにはすでに値があるため、同じ値が返されます。
たとえば、テーブルに合計5つのレコード(item1、item2、item3、item4、item5)があります。
すべてのページは1レコードで、セッションの初期値は(item1)なので、次のようになります。
- item1
| 1 | 2 | 3 | 4 | 5 |
ユーザーがページ「4」をクリックすると、次のようになり、セッションの現在の値は次のようになります(item1、item4)
- item4
| 1 | 2 | 3 | 4 | 5 |
ただし、ユーザーがページ「4」より下のページをクリックしても、出力は同じ「item4」のままですが、ユーザーがページ「4」より上をクリックすると、正常に機能します。
なにか提案を???