Razor MVC使用Model Array填充Javascript数组

我想从我的模型加载一个数组的JavaScript数组。 在我看来,这应该是可能的。

以下两种方式都不起作用。

无法创buildJavaScript循环,并通过带JavaScriptvariables的模型数组增加

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

无法创buildRazor循环,JavaScript超出了范围

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

我可以得到它的工作

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

但我不知道为什么我应该使用JSON。

此刻,我正在限制这个255字节。 将来可能遇到很多MB。

这是可能的,你只需要循环剃刀集合

 <script type="text/javascript"> var myArray = []; @foreach (var d in Model.data) { @:myArray.push("@d"); } alert(myArray); </script> 

希望这可以帮助

JSON语法几乎是编写对象的JavaScript语法 。 所以,就简洁和速度而言,你自己的答案是最好的select。

在我的KnockoutJS模型中填充下拉列表时,我使用这种方法。 例如

 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> 

请注意,我正在使用Json.NET NuGet包进行序列化,并使用ViewBag传递数据。

我正在整合一个滑块,并需要获取文件夹中的所有文件,并具有相同情况的C#数组到JavaScript数组。这个由@heymega解决scheme完美工作,除了我的JavaScriptparsing器在var使用foreach循环恼火。 所以我做了一些避免循环的工作。

 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()); 

和JavaScript代码是

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

希望能帮助到你

为了进一步扩展最常用的答案,以供参考,如果你想添加更复杂的项目到数组中:

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

等等

此外,如果您想将数组作为parameter passing给您的控制器,则可以先将其串行化:

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

我正在处理来自C#的Toast List<Alert> (警报消息),并且需要它作为Toastr的 JavaScript数组(在部分视图( .cshtml文件)中)。 下面的JavaScript代码是为我工作的:

 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); });