我的ajax请求返回一个IEnumerable UpcomingGigs,我想计算每个请求返回多少个Gigs。我已经做过各种尝试,但每次尝试都包括属性值的计数,因此不是一个准确的结果。
CONSOLE.LOG(data.Length); var count = Object.keys(data).length;
ajax数据响应:
两个值都返回相同的错误结果。
public ActionResult FetchGigs(int skip, int take)
{
var upcomingGigs = _context.Gigs
.Include(g => g.Artist)
.Where(g => g.DateTime > DateTime.Now)
.OrderBy(d => d.DateTime)
.Skip(skip).Take(take);
var viewModel = new GigsViewModel
{
UpcomingGigs = upcomingGigs
};
return PartialView("FetchGigs", viewModel);
}
视图模型
的Ajax
public class GigsViewModel
{
public IEnumerable<Gig> UpcomingGigs { get; set; }
public int TotalGigs { get; set; }
public bool ShowActions { get; set; }
public string Heading { get; set; }
}
$(window).scroll(function () {
if ($(window).scrollTop() + $(window).height() > $(document).height() - 100) {
$.ajax({
type: "GET",
url: "@Url.Action("FetchGigs")",
data: { skip: skip, take: take },
success: function (data) {
console.log(data.GigsViewModel.gigId.);
$(".result").append(data);
}
})
}
});
答案 0 :(得分:1)
有多种方法可以做到这一点。一种方法是从局部视图中添加要渲染的ul
元素的数据属性,并将项目计数存储在该属性中。您可以使用IEnumerable.Count()
方法。
@model YourNamespace.GigsViewModel
<ul data-itemcount="@Model.UpcomingGigs.Count()">
@foreach (var item in Model.UpcomingGigs)
{
<li>@item.Title</li>
}
</ul>
现在在您的ajax成功事件中,使用$.parseHTML
解析从服务器收到的响应,然后读取数据属性值
success: function (data) {
var html =$.parseHTML(data);
var itemCount = $(html).data("itemcount");
alert(itemCount);
}
另一种选择是使用find
方法获取列表项数组并获得它的长度。
success: function(data) {
var html = $.parseHTML(data);
var itemCount = $(html).find("li").length;
alert(itemCount);
}
我会采用第一种方法,因为我不喜欢我的浏览器做了这么多工作。 (它必须在这里遍历dom元素以获得计数)