Как использовать данные модели в JavaScript: ASP.NET Core - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть список объектов, которые содержат лат и лонг для позиций маркера.Когда я пытаюсь сохранить список объектов в javascript var и прочитать его в цикле for, он ничего не делает.Я не знаю, где это идет не так.Я пытался преобразовать список в массив, но даже это не помогло.Я проверил значение Model.Asparaguses, и оно было в порядке, поэтому здесь проблема не в этом.

Вот мой 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>

А вот мой внешний .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 }
        });
    }
};

РЕДАКТИРОВАТЬ:

В моей консоли у меня есть эта ошибка:

InvalidValueError: setPosition: не LatLng или LatLngLiteral: в свойстве lat: не число

Когда я записываю массив Asparaguses, я получаю такой вывод:

Аспарагусы: [объект объекта], [объект объекта], [объект объекта], [объект объекта], [объект объекта], [объект объекта]

и когда я вхожузначения Lat и Long от 1 спаржи, я вижу, что они «неопределенные».Но как?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Я думаю, что вместо перехода к регистру верблюдов в Viewmodel класса c # вы можете добавить аннотацию 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, который преобразует все поля в правильный регистр.См. Ссылку CamelCaseContractResolver для получения дополнительной информации

0 голосов
/ 18 сентября 2018

(Официальный ответ, полученный из моего комментария)

После предоставления содержимого переменной через консоль проблема стала ясной. Ваши свойства, определенные в вашей модели, записаны в верхнем CamelCase в соответствии с правилами кодирования и стиля .NET.

JavaScript, однако, использует нижнюю нотацию camelCase. Поэтому, когда вы принудительно ссылаетесь на свои свойства в верхнем CamelCase, это приведет к undefined.

Таким образом, изменив все ссылки на ваши свойства в нижнем обозначении camelCase, ваша проблема должна быть исправлена.

TLDR

Используйте более низкую camelCase нотацию при обращении к свойствам / полям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...