Переменные, описываемые с помощью @
Всем привет. Такой вопрос: обращаюсь к переменной модели ASP MVC в Javascript коде:
var listLength = "@(Model.orderList.Count)"; Длина списка считывается нормально в переменную listLength. Я хочу пройти по всему массиву с помощью цикла, поэтому пишу так: for (var i = 0; i < listLength; i++) { var myGeocoder = ymaps.geocode("Москва @(Model.orderList[i].AddressStreet) @(Model.orderList[i].AddressHome)"); myGeocoder.then(function (res) { myMap.geoObjects.add(res.geoObjects); }); } Но вот переменная i не доступна в строке var myGeocoder = ymaps.geocode("Москва @(Model.orderList[i].AddressStreet) @(Model.orderList[i].AddressHome)"); Не могу понять, почему так, как правильно обращаться к переменной в куске строки @()? |
Цитата:
var myGeocoder = ymaps.geocode("Москва @(Model.orderList["+i+"].AddressStreet) @(Model.orderList["+i+"].AddressHome)"); |
|
Jack Sparrow, попробуй заюзать круглые скобки
var myGeocoder = ymaps.geocode("Москва @(Model.orderList(i).AddressStreet) @(Model.orderList(i).AddressHome)"); |
var myGeocoder = ymaps.geocode("Москва "+@(Model.orderList[i].AddressStreet)+" "+@(Model.orderList[i].AddressHome)); Так что ли? |
Попробовал с кругдыми скобками, так к массиву обращаться нельзя :( А с вынесением слова "Москва " в отдельную строку тоже не проканало. Тут нужен какой-то способ вставить пользовательскую текущую переменную именно в блок @()
|
Jack Sparrow, а так все работает?
var myGeocoder = ymaps.geocode("Москва @(Model.orderList[0].AddressStreet) @(Model.orderList[0].AddressHome)"); |
Попробовал считать список orderList из модели в переменную javascript
var orderList = "@(Model.orderList)"; Но когда обращаюсь к ней, ничего не считывается. Короче она не считалась из модели наверно :( var myGeocoder = ymaps.geocode("Москва " + orderList[i].AddressStreet + " " + orderList[i].AddressHome); |
lord2kim, да, так как ты написал - все работает, считывается первый элемент и все нормально отображается
|
А как вообще по-русски называется блок @() ? Я бы загуглил по нему хотя бы)
|
Кстати, ф-ции и переменные с символом @ у меня почему-то никогда не работают, может в этом проблема?
|
Jack Sparrow,
Нельзя смешать Javascript (отрабатывает на клиенте) и ASP.NET (отрабатывает на сервере). На момент исполнения Javascript вместо серверной переменной стоит значение, т.е. вместо var listLength = "@(Model.orderList.Count)";в html-странице будет так var listLength = "5";Если нужно получить доступ на клиенте к модели, то необходимо модель сериализовать и передать на клиентскую часть. Что-то вроде этого: var model = @(Json(Model)); // должно преобразовать в вид {orderList: [{AddressStreet: "streeet1"},{...},{...},...]} И дальше можно работать как с обычным объектом: for(var i=0; i<model.orderList.length; i++) { var street = model.orderList[i].AddressStreet; // и т.д. } |
|
Странно, попробовал вот так
var model = "@Html.Raw(Json.Encode(Model))"; Но выдает ошибку Экземпляр ObjectContext был удален и больше не может использоваться в операциях, требующих соединения. именно на этой строке |
Jack Sparrow,
1) кавычки не нужны, т.к. получится строка 2) попробуй преобразовать только orderList, остальные поля вроде тебе не нужны на клиенте var orderList = @Html.Raw(Json.Encode(Model.orderList)); |
|
поднимаю снова тему, не могу никак решить проблему
|
Часовой пояс GMT +3, время: 03:10. |