【发布时间】:2018-05-09 18:40:58
【问题描述】:
我目前有如下所示的代码,我将数据从控制器传递到我的视图,然后显示数据。
使用 ajax 我想调整我的视图,使其对通过控制器传递的数据更加动态。
目标:
目前,视图会返回用户关注的人的姓名列表。我想要一个设置变量,例如maxShow = 5,页面加载时最多显示5个人。当用户滚动到页面底部时,ajax 将获取并放置下一个 5 到 dom 上,这应该是一个连续的循环。
我已经用 jquery 提出了一些粗略的伪代码,如下所示,用于动态加载每个人,但无法弄清楚如何将呼叫限制为 5 人,然后滚动时再限制 5 人,依此类推到最底层。我唯一的半解决方案是最后将我的以下查询更改为 .take(5) 。
$(window).scroll(function() {
if($(window).scrollTop() + $(window).height() == $(document).height()) {
// Make an Ajax call
$.get("/Following",function(data){
$("#div").html(data);
});
}
[Authorize]
public ActionResult Following()
{
var userId = User.Identity.GetUserId();
var following = _context.Followings
.Where(x => x.FollowerId == userId)
.Select(a => a.Followee)
.ToList();
var viewModel = new FollowingViewModel
{
Following = following,
ShowActions = User.Identity.IsAuthenticated,
Heading = "People I'm following"
};
return View("following", viewModel);
}
查看
@model Gighub3.ViewModels.FollowingViewModel
@{
ViewBag.Title = "Following";
}
<h1>@Model.Heading</h1>
<ul>
@foreach (var following in Model.Following)
{
<li>@following.Name</li>
}
</ul>
【问题讨论】:
-
您需要为每次调用 ajax 时递增的“计数器”设置一个全局 javascript 变量,并将其传递给控制器方法,以便您可以使用
.Skip().Take()in您的查询 -
在特定情况下,对于某些外部/业务因素,您无法将参数传递给 Skip and Take 方法,您将如何处理? - 你怎么能找到更新 Skip 的方法? @StephenMuecke
-
如果浏览器不向服务器发送值,那么服务器就无法知道您接下来想要什么记录集。目前尚不清楚为什么您不能将方法更改为
public ActionResult Following(int page) -
忽略我问题中的代码,ActionResult 本身不执行查询,而是在 actionResult 中调用方法 getData() 并且 getData() 返回 Task
模型(我想要的数据),并且该模型被传递给 ActionResult。但是,我的 ajax 是针对 ActionResult 的,出于业务需求的原因,我无法在任务 getData() 中传递参数,并且由于查询是在 getData() 中完成的,因此无法考虑在 ActionResult 中使用参数。对不起,如果这真的解释得不好@StephenMuecke -
你将一个值传递给你的 ActionResult 方法(比如
int page参数),然后使用var data = getData().Skip(page * x).Take(x);过滤结果,其中x是你想要的记录数(尽管它效率不高,因为您的getData()方法每次都返回所有记录,而不是查询数据库并仅返回您想要的x记录
标签: javascript jquery .net asp.net-mvc