Knockout.js 为什么KnockoutJS显示的对象数与我的Web API控制器的对象数不同?

Knockout.js 为什么KnockoutJS显示的对象数与我的Web API控制器的对象数不同?,knockout.js,asp.net-mvc-5,asp.net-web-api,Knockout.js,Asp.net Mvc 5,Asp.net Web Api,解决方案与此问题相同: …但这个问题本身是独一无二的,因此处于相同情况下的任何人都有希望比我更容易找到答案 我对Knockout和webapi还相当陌生。我基于在几个不同教程中找到的类似代码构建了以下内容 function MyViewModel() { var self = this; self.objects = ko.observableArray([]); $.getJSON("http://localhost:XXXX/api/getobjects", fun

解决方案与此问题相同:

…但这个问题本身是独一无二的,因此处于相同情况下的任何人都有希望比我更容易找到答案

我对Knockout和webapi还相当陌生。我基于在几个不同教程中找到的类似代码构建了以下内容

function MyViewModel()
{
    var self = this;
    self.objects = ko.observableArray([]);

    $.getJSON("http://localhost:XXXX/api/getobjects", function (data,status,xhr) {
        self.objects(data);
        alert(xhr + " " + status + ", " + "Objects returned: " +  self.objects.length);
    }
}

ko.applyBindings(new MyViewModel());
在我的控制器中,我的目标是通过匹配当前用户Id的
MatchingId
从数据库中的表中筛选对象。我的控制器中有:

public IQueryable<myObject> GetObjects()
{
    this.ApplicationDbContext - new ApplicationDbContext();
    this.UserManager = new UserManager<ApplicationUser>(this.ApplicationDbContext));
    var user = UserManager.FindById(User.Identity.GetUserId());

    var query = db.MyObjects.Where(a => a.MatchingId == user.Id);

    return query;
}

服务器端的查询中有四个有效对象。有人能帮我找出它们为什么没有通过传输吗?

ko.ObservalArray确实有一个长度属性,但它是ObservalArray函数本身的属性,而不是数组的属性:

要获取封闭数组的长度,请调用ObservalArray,然后调用length:
self.object().length
。例如,在代码中,将警报更改为:

alert(xhr + " " + status + ", " + "Objects returned: " + self.objects().length);
这会给你带来你想要的“4”

参考:

在您的警报上方,您可以添加
console.log(数据、数据类型)
并告诉我们控制台中打印的内容吗?一种可能的解释是,“数据”并不是您所希望的——它可能是一个对象,而不是一个数组,甚至可能是一个字符串。哦,这是您的消息中的一个输入错误,还是您的代码中的一个输入错误<代码>self.objects-ko.observearray([])。。。显然,你需要的不是
-
,而是
=
是的,这是一个打字错误。谢谢你抓住它。现在修好了。我将数据发送到控制台,低看它列出了我的四个对象数组。非常奇怪的是,当数组显然不是空的时候,objects.length会产生0。好的,很好,这很好。在这种情况下,您看到的问题是ko.observableArray实际上没有提供长度参数。要获得封闭数组的长度,需要调用ObservalArray,然后询问长度,如:
self.objects().length
。我相当肯定,这将给你的'4'你追求的,所以我会添加它作为一个答案!正确答案的可能重复可能,见鬼,这个问题可能是一个写得很好/伪装得很好的重复你链接的问题。-作为一个小提示,observableArrays确实有一个
length
属性,因为它们是函数。是的,这让我很反感。Intellisense说“是的,长度是该数组的一个属性”,所以我错误地认为它是我要寻找的长度。
alert(xhr + " " + status + ", " + "Objects returned: " + self.objects().length);