Mam listę użytkowników, które przechodzę z kontrolera do mojego widoku przy użyciu worka widoku. Teraz muszę mieć możliwość przekazania tej samej listy do javascript na stronie. Mogę zrekonstruować listę za pomocą pętli foreach:Lista przechodzących z MVC ViewBag do JavaScript
@foreach (var item in ViewBag.userList) //Gets list of users passed from controller and adds markers to the map
{
var userLat = item.LastLatitude;
var userLon = item.LastLongitude;
var _userId = item.Id;
<script>array.push({"userId":"'@_userId'","userLat":"'@userLat'","userLon":"'@userLon'"});</script>
}
to jednak wydaje się bałagan i podejście wymaga dużo przeróbek czy zmian. Wiem, że są podobne posty na przepełnieniu stosu, ale wiele z nich używa poprzedniej wersji MVC i ta sama składnia nie ma zastosowania. Jakieś pomysły?
Dzięki za szybką i szczegółową odpowiedź! Ale pojawia się następujący komunikat: "Nie można użyć wyrażenia lambda jako argumentu dla operacji dynamicznie wywoływanej ..." bez części IEnumerable. Po dodaniu tej części dostaję również komunikat "Argumenty typu dla metody ... nie można wywnioskować z użycia". Dziękuję za pomoc i przepraszam, jeśli jest to błąd debiutanta. p.s. Używam modelu widoku do czegoś innego na tej stronie, dlatego używam worka widoku. – Matt
Model widoku to klasa zaprojektowana specjalnie w celu spełnienia wymagań Twojego widoku. W takim przypadku twój widok musi wygenerować ten dynamiczny javascript. Tak więc twój model widoku powinien zawierać właściwość kolekcji typu 'IEnumerable'. A następnie po prostu zamień całą obsadę na 'Model.Users.Select (...)'.Jeśli opuścisz słabo napisaną ViewBag, będziesz musiał rzucić ją do właściwego 'IEnumerable ' typu. –
OK Szybko zmodyfikowałem stronę i użyłem modelu View i zadziałało. Musiałem również odnieść się do innej z twoich odpowiedzi http://stackoverflow.com/questions/12111729/razor-javascript-and-trailing-semicolon, nie wiedziałem o tym błędzie w VS2012. Dzięki za wspaniałą i pouczającą odpowiedź! – Matt