如何在JavaScript中使用模型数据:ASP.NET核心
我有一个包含lat和long标记位置的对象列表。 当我试图将对象列表保存到javascript变量中并在for循环中读取时,它什么也不做。我不知道哪里出了问题。 我试图做的是将列表转换为数组,但即使这样也无济于事。我检查了模型。芦笋值,它很好,所以这不是问题所在 这是我的ViewModel:如何在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;
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
表示法。因此,当您在upperCamelCase
中强制引用属性时,将导致未定义
因此,通过更改所有在下方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`toasparaguses[I].Lat