如何在JavaScript中使用模型数据:ASP.NET核心

如何在JavaScript中使用模型数据:ASP.NET核心,javascript,c#,google-maps,asp.net-core-mvc,Javascript,C#,Google Maps,Asp.net Core Mvc,我有一个包含lat和long标记位置的对象列表。 当我试图将对象列表保存到javascript变量中并在for循环中读取时,它什么也不做。我不知道哪里出了问题。 我试图做的是将列表转换为数组,但即使这样也无济于事。我检查了模型。芦笋值,它很好,所以这不是问题所在 这是我的ViewModel: public class FieldViewModel { public Field Field { get; set; } public object[] ChartData { get;

我有一个包含lat和long标记位置的对象列表。 当我试图将对象列表保存到javascript变量中并在for循环中读取时,它什么也不做。我不知道哪里出了问题。 我试图做的是将列表转换为数组,但即使这样也无济于事。我检查了模型。芦笋值,它很好,所以这不是问题所在

这是我的ViewModel:

public class FieldViewModel
{
    public Field Field { get; set; }
    public object[] ChartData { get; set; }
    public Asparagus[] Asparaguses { get; set; }
}
以下是我视图中的.js代码:

<script>
asparaguses = @Html.Raw(Json.Serialize(Model.Asparaguses));
</script>

asparaguses=@Html.Raw(Json.Serialize(Model.asparaguses));
下面是我的外部.js代码:

var asparaguses;

function initMap() {
    var map = new google.maps.Map(document.getElementById('map'), {
        center: { lat: 51.25202200, lng: 5.710260 },
        zoom: 15
    });

    for (var i = 0; i < asparaguses.length; i++) {
        // Create a marker and set its position.
        var marker = new google.maps.Marker({
            map: map,
            position: { lat: asparaguses[i].Lat, lng: asparaguses[i].Long }
        });
    }
};
var芦笋;
函数initMap(){
var map=new google.maps.map(document.getElementById('map'){
中心:{lat:51.25202200,lng:5.710260},
缩放:15
});
对于(var i=0;i
编辑:

在我的控制台中出现以下错误:

InvalidValueError:setPosition:不是LatLng或LatLngLiteral:在中 属性lat:不是一个数字

当我记录芦笋阵列时,我得到以下输出:

芦笋:[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象]

当我记录1个芦笋的Lat和Long值时,我发现它们是“未定义的”。但是怎么做呢?

(官方答案来源于我的评论)

通过控制台提供变量的内容后,问题变得很清楚。根据.NET的编码和样式规则的指示,在模型中定义的属性以大写
CamelCase
编写

然而,JavaScript使用较低的
camelCase
表示法。因此,当您在upper
CamelCase
中强制引用属性时,将导致
未定义

因此,通过更改所有在下方
camelCase
符号中对属性的引用,您的问题应该得到解决

TLDR


引用属性/字段时,请使用小写
camelCase
符号

我认为不必在c#类的Viewmodel中更改为camel大小写,您可以添加JSONProperty注释(使用Newtonsoft.JSON),它将自动将字段的大小写转换为JSONProperty中的名称,然后再像这样序列化

public class FieldViewModel
{
   [JsonProperty(PropertyName="field")]
   public Field Field { get; set; }

   [JsonProperty(PropertyName="chartData")]
   public object[] ChartData { get; set; }

   [JsonProperty(PropertyName="asparaguses")]
   public Asparagus[] Asparaguses { get; set; }
}

或者,您可以使用ContractResolver将所有字段转换为正确的大小写。有关更多信息,请参见链接

是否已检查是否正确地从ViewModel接收到该值?因此,第一步将是验证一个简单的控制台日志,在设置js中的var芦笋是否包含您期望的值后,它是否包含您期望的值?@Saltz是的,在我的viewmodel中,芦笋列表是正确的。但是在我的控制台中,我现在看到了这个错误:InvalidValueError:setPosition:不是LatLng或LatlInTerral:在属性lat:不是数字显示控制台输出的芦笋,比如console.log(芦笋)@Nisfan这里:芦笋:[object object],[object object],[object object],[object object],[object object object],[object object object],但是当我记录一个变量为1芦笋时,该值是“未定义的”@Svenmarim我通过查看你的问题伴侣就得到了答案。我想知道如何将ViewModel传递到外部Javascript,您的问题回答了所有问题。谢谢你,伙计。:)我想你没有理解对。我不需要在viewmodel中更改驼峰案例。我的财产仍然是大写字母。当我在Javascript中引用属性时,我需要使用普通字母。因此,我唯一需要改变的是“芦笋[I].Lat`to
asparaguses[I].Lat