我正在尝试在项目中创建无限滚动。
场景 -
我有大约100张图片可以在我的查看页面上渲染。对于每个滚动到底部请求,我要发送的Linq乘以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>
滚动到底部时始终增加+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
?
Skip
/Take
方法应始终按以下顺序使用:Skip
,然后在用于分页时Take
。Skip(0)
是毫无意义的...您应该只返回查询中的新元素,然后将它们附加到页面上,而不是替换整个HTML内容。在JavaScript代码中使用
append()
而不是html()
。您可以在
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>