Próbuję załadować tablicę JavaScript z tablicą z mojego modelu. Wydaje mi się, że powinno to być możliwe.
Żaden z poniższych sposobów nie działa.
Nie można utworzyć pętli JavaScript i inkrementować za pomocą tablicy modelu ze zmienną JavaScript
for(var j=0; j<255; j++)
{
jsArray = (@(Model.data[j])));
}
Nie można utworzyć pętli Razor, JavaScript jest poza zakresem
@foreach(var d in Model.data)
{
jsArray = d;
}
Mogę to wykorzystać
var jsdata = @Html.Raw(Json.Encode(Model.data));
Ale nie wiem, dlaczego powinienem używać JSON.
Również w tej chwili ograniczam to do 255 bajtów. W przyszłości może mieć wiele MB.
javascript
arrays
asp.net-mvc
asp.net-mvc-4
razor
Tom Martin
źródło
źródło
Odpowiedzi:
Jest to możliwe, wystarczy przejrzeć kolekcję maszynek do golenia
Mam nadzieję że to pomoże
źródło
@d
jest zadeklarowana wewnątrz pętli foreach. Zauważ, że d ma na początku termin VAR. Dzięki temu można go używać w pętli foreachSkładnia JSON jest w zasadzie składnią JavaScript do kodowania obiektu . Dlatego pod względem zwięzłości i szybkości najlepszą odpowiedzią jest twoja własna odpowiedź.
Używam tego podejścia podczas wypełniania list rozwijanych w moim modelu KnockoutJS . Na przykład
...
Należy pamiętać, że używam pakietu NuGet Json.NET do serializacji i ViewBag do przekazywania danych.
źródło
Pracowałem z listą toastów (komunikatów ostrzegawczych)
List<Alert>
z C # i potrzebowałem jej jako tablicy JavaScript dla Toastra w częściowym widoku (.cshtml
plik). Poniższy kod JavaScript zadziałał dla mnie:źródło
Integrowałem suwak i musiałem pobrać wszystkie pliki w folderze i miałem taką samą sytuację tablicy C # z tablicą javascript.To rozwiązanie @heymega działało idealnie, z wyjątkiem tego, że mój parser javascript był zirytowany podczas
var
używania wforeach
pętli. Więc trochę popracowałem nad unikaniem pętli.A kod javascript to
Mam nadzieję, że to pomoże
źródło
Aby rozwinąć odpowiedź, która została najwyżej oceniona, w celach informacyjnych, jeśli chcesz dodać bardziej złożone elementy do tablicy:
@:myArray.push(ClassMember1: "@d.ClassMember1", ClassMember2: "@d.ClassMember2");
itp.
Ponadto, jeśli chcesz przekazać tablicę jako parametr do swojego kontrolera, możesz najpierw określić ją jako ciąg znaków:
myArray = JSON.stringify({ 'myArray': myArray });
źródło
@:myArray.push(ClassMember1: "@d.ClassMember1", ClassMember2: "@d.ClassMember2");
To byłoby lepsze podejście, ponieważ wdrożyłem :)
Mam nadzieję, że pomoże ci to zapobiec iteracji modelu (szczęśliwe kodowanie)
źródło
Jeśli jest to tablica symetryczna (prostokątna), spróbuj umieścić ją w jednowymiarowej tablicy javascript; użyć maszynki do golenia do określenia struktury macierzy; a następnie przekształcić w dwuwymiarową tablicę.
źródło