0

Я разрабатываю веб-приложение .NET MVC 4 с помощью Google Maps API.Итерация через список в javascript

В этом проекте я должен представить несколько полигонов над картой. Решение, к которому я пришел, состоит в том, чтобы создать две таблицы в database, которая имеет идентификатор для каждого многоугольника, а другая сохраняет широту и долготу каждого угла каждого многоугольника. Теперь мне нужно загрузить эти многоугольники на карту в представлении.

Я пытался достичь этого, загрузив список в ViewBag и пропустив его в скрипте, который будет представлять многоугольники на карте. То, что я отправляю в ViewBag, является List<List<string[]>>. Каждый член «основного» списка представляет собой многоугольник, который состоит из нескольких маркеров (List<string[]>). В string[] я сохраняю широту, долготу и описание каждого маркера.

Моя проблема сейчас проходит через такой список в Javascript. Возможно ли это? Или есть более плавное решение, которое я не рассматриваю?

Спасибо!

+0

Можете ли вы записать данные, полученные с помощью js: console.log (viewBagData)? Я хочу помочь вам, но вам нужно увидеть пример данных раньше. – FelProNet

ответ

0

Что я хотел бы сделать, это передать данные в одном объекте с вашей точки зрения, и с вашей точки зрения, использовать @Html.Raw(Json.Encode(polygons)). Пример ниже.

C# Модель:

public class Polygon { 
    public string Name { get; set; } // name of polygon 
    public List<string> Markers { get; set; } // list of markers 
} 

MVC контроллер:

List<Polygon> polygons = ...; // List of Polygons, retrieved from database 

return View(polygons); 

Бритва Вид:

@model List<Polygon> 

<script> 
    var polygons = @Html.Raw(Json.Encode(Model)); // will render as var polygons = [ { Name: 'Polygon1', Markers: [ 'marker1', 'marker2' ] }, { Name: 'Polygon2', Markers: [...] } ]; 

    // from @Kosmo's answer 
    polygons.forEach(function(polygon) { 
    console.log('Name is ' + polygon.Name); 
    console.log('Markers are ' + polygon.Markers.join(',')); 
    }); 
</script> 

То, что вы в конечном итоге с представляет собой список в формате JSON, который является данными, которые были переданы с того момента, когда вы создали его в контроллере.

+0

Спасибо, что сработало. – enriquesroman

0

Вы можете сделать что-то вроде этого:

<script> 
    var arr = '@YourList`; 

    arr .forEach(function(item) { 
    // whatevery you want here 
    }); 
</script> 
0

Да, это уже возможно, если вы сохраните значения ViewBag в переменной на javascript.

вы могли бы сделать так:

<script> 
var myViewBagValue = '@ViewBag.NameOfViewBag'; 

//then you can iterate using one of all those ways that javascript provides 

//every(), filter(), forEach(), map(), some() and etc. 

</script> 

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

Смежные вопросы