Ich habe eine Liste von Benutzern, die ich von meinem Controller zu meiner Ansicht mit der Ansichtstasche übergeben. Jetzt muss ich in der Lage sein, die gleiche Liste an das Javascript auf der Seite zu übergeben. Ich könnte die Liste mit einer foreach-Schleife rekonstruieren:Übergabe der Liste von MVC ViewBag an 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>
}
Allerdings scheint dies wie ein chaotischer Ansatz und eine Menge Nacharbeit erforderlich, wenn eine Änderung vorgenommen wird. Ich weiß, es gibt ähnliche Beiträge auf Stack-Überlauf, aber viele von ihnen verwenden vorherige Version von MVC und die gleiche Syntax scheint nicht zu gelten. Irgendwelche Ideen?
Danke für die schnelle und detaillierte Antwort! Aber ich erhalte den folgenden Fehler 'Kann einen Lambda-Ausdruck nicht als Argument für eine dynamisch versendete Operation verwenden ...' ohne den IEnumerable-Teil. Mit diesem hinzugefügten Teil bekomme ich auch einen Fehler 'Die Argumenttypen für die Methode ... können nicht aus der Verwendung abgeleitet werden'. Danke für die Hilfe, und es tut mir leid, wenn das ein Anfängerfehler ist. p.s. Ich verwende das Ansichtsmodell für etwas anderes auf dieser Seite, deshalb verwende ich die Ansichtstasche. – Matt
Aber ein View-Modell ist eine Klasse, die Sie speziell für die Anforderungen Ihrer Sicht entwerfen. In diesem Fall muss Ihre Ansicht dieses dynamische Javascript generieren. Ihr View-Modell sollte also eine Collection-Eigenschaft vom Typ 'IEnumerable 'enthalten. Und dann ersetzen Sie einfach die gesamte Besetzung durch 'Model.Users.Select (...)'.Wenn Sie den schwach getippten ViewBag verlassen, müssen Sie ihn in den richtigen 'IEnumerable ' Typ umwandeln. –
Ok Ich habe die Seite schnell geändert und das View-Modell verwendet und es hat funktioniert. Ich musste auch auf eine andere Ihrer Antworten verweisen http://stackoverflow.com/questions/12111729/razor-javascript-and-trailing-semicolon, wusste nicht über diesen Fehler in VS2012. Danke für die tolle und informative Antwort! – Matt