Razor MVC Populating Javascript array with Model Array
This is possible, you just need to loop through the razor collection
<script type="text/javascript"> var myArray = []; @foreach (var d in Model.data) { @:myArray.push("@d"); } alert(myArray);</script>
Hope this helps
I was working with a list of toasts (alert messages), List<Alert>
from C# and needed it as JavaScript array for Toastr in a partial view (.cshtml
file). The JavaScript code below is what worked for 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);});
JSON syntax is pretty much the JavaScript syntax for coding your object. Therefore, in terms of conciseness and speed, your own answer is the best bet.
I use this approach when populating dropdown lists in my KnockoutJS model. E.g.
var desktopGrpViewModel = { availableComputeOfferings: ko.observableArray(@Html.Raw(JsonConvert.SerializeObject(ViewBag.ComputeOfferings))), desktopGrpComputeOfferingSelected: ko.observable(),};ko.applyBindings(desktopGrpViewModel);
...
<select name="ComputeOffering" class="form-control valid" id="ComputeOffering" data-val="true" data-bind="options: availableComputeOffering, optionsText: 'Name', optionsValue: 'Id', value: desktopGrpComputeOfferingSelect, optionsCaption: 'Choose...'"></select>
Note that I'm using Json.NET NuGet package for serialization and the ViewBag to pass data.