从MVC传递数组到JavaScript?

我可以通过使用这个MVC ASP.NET传递一个variables:

var lastCategoryId = '<%=Model.CS.LastSelectedCategory %>'; 

这工作正常与string或整数,但我该如何处理string数组? 我试图以相同的方式传递数组,但variables设置为System.String []?

这应该做的

 var someArray=[<%foreach (var s in myStringArray){%>'<%=s%>',<%}%>]; 

你可以让.NET用这么简单的代码来处理所有繁重的工作。

这假设你正在使用MVC Razor语法。

var yourJavaScriptArray = @Html.Raw(Json.Encode(Model.YourDotNetArray));

对于较新版本的MVC,请使用:

var yourJavaScriptArray = @Html.Raw(Json.Serialize(Model.YourDotNetArray));

你可以JSON序列化它。 这种方式可以传递更复杂的值,而不用担心转义简单的引号,双引号等等。

 var categoriesList = <%= new JavaScriptSerializer().Serialize(new[] { "value1", "value2" }) %>; 

编写一个HTML助手来做到这一点会更好:

 public static class HtmlExtensions { public static string JsonSerialize(this HtmlHelper htmlHelper, object value) { return new JavaScriptSerializer().Serialize(value); } } 

然后在你看来:

 <script type="text/javascript"> var categoriesList = <%= Html.JsonSerialize(new[] { "value1", "value2" }) %>; </script> 

像这样的东西:

 <script type="text/javascript"> var myArr = [<%=string.Join(",", strArr.Select(o => "\"" + o + "\"")) %>]; </script> 

您需要将数组格式化为JavaScript数组语法。

 var someArray = [<%= Model.SomeArray.Select(x => "'" + x +"'") .Aggregate((x,y) => x + ", " + y); %>]; 

这将用单引号将每个条目括起来,然后用方括号中的逗号将它们连接在一起。

更新:删除额外的括号。

一个class轮:

 var data = [@Html.Raw(String.Join(",", Model.MyArray.Select(i => "'" + i + "'")))]; 

那么简单,那么简单

 <script type="text/javascript"> var array = @Html.Raw( Json.Encode( (Model).Select(m=> new { id= m.ID, name=m.Name }) ) ); </script> 

输出是:

 [{"id":1,"name":"Name of 1"}, {"id":2,"name":"Name of 2"}, ...]; 

使用Json.NET

 var yourlist = JSON.parse('@Html.Raw(JsonConvert.SerializeObject(Model.YourList))'); 

只是想用Razor语法提供一个答案:

我们有一个Dictionary<int, int> ,它是以“数组数组”的forms呈现给jQuery Sparkline的。

 var usageData = [ @string.Join(",", Model.UsageData.Select(d => string.Format("[{0},{1}]", d.Key, d.Value)).ToArray()) ]; 

这是用来这样的:

 $('#sparkline').UsageSparkline(usageData, { tooltipFormatter: cachedTooltips }); 

这是我们在查看源代码时得到的结果:

 var usageData = [ [-13,0],[-12,1],[-11,0],[-10,0],[-9,1],[-8,1],[-7,0],[-6,2],[-5,2],[-4,0],[-3,0],[-2,9],[-1,3],[0,4] ]; $('#sparkline').UsageSparkline(usageData, { tooltipFormatter: cachedTooltips });