2014-01-26 39 views
2

我想在我的項目中創建無限滾動。接下來不要跳過以前的LINQ c#

Scene-

我有大約100張照片來呈現我的視圖頁面上。對於每一個滾動到底要求我通過jQuery-

<script type="text/javascript"> 
    $(function() { 
     var value = 0; 
     function IncreasedValue() { 
      value += 10; 
      return value; 
     } 
     $(window).scroll(function() { 
      if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) { 

       $.ajax({ 
        url: '/Home/FunHome/?valuetake=' + IncreasedValue() + '&valueskip=' + "0", 
        type: 'GET', 
        datatype: 'HTML', 
        success: function (data) { 

         $('#funhome-partial').html(data); 

        } 
       }); 
      } 
     }); 
    }); 
</script> 

它總是增加發送LINQ取值由+10當滾動至底部。

第一次加載我的操作檢索5條記錄並跳過無(正常工作)。只要takevalue增加10,我就將這個值解析爲LINQ Take()

public ActionResult FunHome(int? valueskip, int? valuetake) { 
    if (valuetake == null && valueskip == null) { 
     int take = 5; 
     int skip = 0; 

     var cardlist = (from u in db.CardTables 
         select new CardModel { 
          cardDate = u.CardDate, 
          cardFileName = u.CardFileName, 
          cardFilePath = u.CardFilePath, 
          cardHashCode = u.CardHashCode, 
          cardID = u.CardID, 
          cardTitle = u.CardTitle 

         }).Take(take).Skip(skip); 

     return View(cardlist); 
    } 
    else { 
     int skip = 0; 
     int take = Convert.ToInt32(valuetake); 
     var cardlist = (from u in db.CardTables 
         select new CardModel { 
          cardDate = u.CardDate, 
          cardFileName = u.CardFileName, 
          cardFilePath = u.CardFilePath, 
          cardHashCode = u.CardHashCode, 
          cardID = u.CardID, 
          cardTitle = u.CardTitle 

         }).Take(take).Skip(skip); 
     return PartialView("FunHome", cardlist); 

    } 
} 

目前正在發生的事情是,當AJAX查詢請求的10條記錄,該操作檢索那些未來10條記錄,並採取所有要求記錄再次呈現的所有頁面。

這會減慢我的應用程序,因爲將每個滾動的所有記錄都渲染爲底部事件。

注意 -

我不想跳過以前的記錄是明顯的所有圖片應該顯示。

有沒有什麼方法可以加載下一個記錄,我可以通過LINQ來實現?

回答

3
  1. Skip/Take方法應該總是以該順序被使用:Skip然後Take用於尋呼時。

  2. Skip(0)是沒有意義的......

  3. 您應該只從查詢返回的新元素,並將它們添加到您的網頁,而不是替換整個HTML內容。在您的JavaScript代碼中使用append()而不是html()

  4. 你可以準備你的查詢定義之前if/else,然後就申請適當Skip/Take組合,以防止重複的代碼。

public ActionResult FunHome(int? valueskip, int? valuetake) { 

    var query = (from u in db.CardTables 
       select new CardModel { 
        cardDate = u.CardDate, 
        cardFileName = u.CardFileName, 
        cardFilePath = u.CardFilePath, 
        cardHashCode = u.CardHashCode, 
        cardID = u.CardID, 
        cardTitle = u.CardTitle 
       }); 

    if (valuetake == null && valueskip == null) { 
     int take = 5; 

     var cardlist = query.Take(take); 

     return View(cardlist); 
    } 
    else { 
     int skip = Convert.ToInt32(valueskip); 
     int take = Convert.ToInt32(valuetake); 

     var cardlist = query.Skip(skip).Take(take); 

     return PartialView("FunHome", cardlist); 
    } 
} 
<script type="text/javascript"> 
    $(function() { 
     var value = 0; 
     function IncreasedValue() { 
      value += 10; 
      return value; 
     } 
     $(window).scroll(function() { 
      if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) { 
       var currentValue = value; 
       $.ajax({ 
        url: '/Home/FunHome/?valuetake=' + IncreasedValue() + '&valueskip=' + currentValue, 
        type: 'GET', 
        datatype: 'HTML', 
        success: function (data) { 

         $('#funhome-partial').append(data); 

        } 
       }); 
      } 
     }); 
    }); 
</script>