Razor MVC Popolazione di array Javascript con Model Array

Sto provando a caricare un array JavaScript con un array dal mio modello. Mi sembra che questo dovrebbe essere ansible.

Nessuno dei modi seguenti funziona.

Imansible creare un loop JavaScript e incrementare tramite Model Array con la variabile JavaScript

for(var j=0; j<255; j++) { jsArray = (@(Model.data[j]))); } 

Imansible creare un ciclo Razor, JavaScript è fuori portata

  @foreach(var d in Model.data) { jsArray = d; } 

Posso farlo funzionare

  var jsdata = @Html.Raw(Json.Encode(Model.data)); 

Ma non so perché dovrei usare JSON.

Anche mentre al momento sto limitando questo a 255 byte. In futuro potrebbe essere eseguito in molti MB.

Questo è ansible, è sufficiente scorrere la collezione di razor

  

Spero che questo ti aiuti

La syntax JSON è praticamente la syntax JavaScript per la codifica dell’object . Pertanto, in termini di concisione e velocità, la tua risposta è la migliore.

Uso questo approccio quando compilo gli elenchi a discesa nel mio modello KnockoutJS . Per esempio

 var desktopGrpViewModel = { availableComputeOfferings: ko.observableArray(@Html.Raw(JsonConvert.SerializeObject(ViewBag.ComputeOfferings))), desktopGrpComputeOfferingSelected: ko.observable(), }; ko.applyBindings(desktopGrpViewModel); 

  

Si noti che sto usando il pacchetto NuGet di Json.NET per la serializzazione e il ViewBag per passare i dati.

Stavo integrando un dispositivo di scorrimento e avevo bisogno di ottenere tutti i file nella cartella e di avere la stessa situazione dell’array C # su array javascript. Questa soluzione di @heymega funzionava perfettamente, tranne il mio parser javascript che era infastidito dall’uso di var nel ciclo foreach . Così ho fatto un po ‘di lavoro evitando il loop.

 var allowedExtensions = new string[] { ".jpg", ".jpeg", ".bmp", ".png", ".gif" }; var bannerImages = string.Join(",", Directory.GetFiles(Path.Combine(System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath, "Images", "banners"), "*.*", SearchOption.TopDirectoryOnly) .Where(d => allowedExtensions.Contains(Path.GetExtension(d).ToLower())) .Select(d => string.Format("'{0}'", Path.GetFileName(d))) .ToArray()); 

E il codice javascript è

 var imagesArray = new Array(@Html.Raw(bannerImages)); 

Spero che sia d’aiuto

Stavo lavorando con un elenco di toast (messaggi di avviso), List da C # e ne avevo bisogno come array JavaScript per Toastr in una vista parziale (file .cshtml ). Il codice JavaScript qui sotto è quello che ha funzionato per me:

 var toasts = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(alerts)); toasts.forEach(function (entry) { var command = entry.AlertStyle; var message = entry.Message; if (command === "danger") { command = "error"; } toastr[command](message); }); 

Per espandere la risposta più votata, per riferimento, se si desidera aggiungere elementi più complessi alla matrice:

@:myArray.push(ClassMember1: "@d.ClassMember1", ClassMember2: "@d.ClassMember2");

eccetera.

Inoltre, se si desidera passare l’array come parametro al controller, è ansible prima di stringerlo:

myArray = JSON.stringify({ 'myArray': myArray });

Se è un array simmetrico (rettangular), prova a inserire un array javascript a una dimensione singola; usa il razor per determinare la struttura dell’array; e quindi trasformarsi in una matrice bidimensionale.

 // this just sticks them all in a one dimension array of rows * cols var myArray = new Array(); @foreach (var d in Model.ResultArray) { @:myArray.push("@d"); } var MyA = new Array(); var rows = @Model.ResultArray.GetLength(0); var cols = @Model.ResultArray.GetLength(1); // now convert the single dimension array to 2 dimensions var NewRow; var myArrayPointer = 0; for (rr = 0; rr < rows; rr++) { NewRow = new Array(); for ( cc = 0; cc < cols; cc++) { NewRow.push(myArray[myArrayPointer]); myArrayPointer++; } MyA.push(NewRow); } 

Questo sarebbe un approccio migliore come ho implementato 🙂

 @model ObjectUser @using System.Web.Script.Serialization @{ var javaScriptSearilizer = new JavaScriptSerializer(); var searializedObject = javaScriptSearilizer.Serialize(Model); }  

Spero che questo ti aiuti a prevenire il modello iterativo (codifica felice)