将数组从 MVC 传递给 javascript?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3850958/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Pass Array from MVC to javascript?
提问by Banshee
I can pass a variable from MVC ASP.NET by using this :
我可以使用这个从 MVC ASP.NET 传递一个变量:
var lastCategoryId = '<%=Model.CS.LastSelectedCategory %>';
This work fine with string or integer but how do I do with an array of strings? I have tried to pass the array the same way but the variable is set to System.String[] ?
这适用于字符串或整数,但如何处理字符串数组?我试图以相同的方式传递数组,但变量设置为 System.String[] ?
采纳答案by Adrian Grigore
This should do
这应该做
var someArray=[<%foreach (var s in myStringArray){%>'<%=s%>',<%}%>];
回答by James Mikesell
You could let .NET handle all the heavy lifting for you with this simple line of code.
您可以使用这行简单的代码让 .NET 为您处理所有繁重的工作。
This assumes you're using MVC Razor syntax.
这假设您使用的是 MVC Razor 语法。
var yourJavaScriptArray = @Html.Raw(Json.Encode(Model.YourDotNetArray));
var yourJavaScriptArray = @Html.Raw(Json.Encode(Model.YourDotNetArray));
For newer versions of MVC, use:
对于较新版本的 MVC,请使用:
var yourJavaScriptArray = @Html.Raw(Json.Serialize(Model.YourDotNetArray));
var yourJavaScriptArray = @Html.Raw(Json.Serialize(Model.YourDotNetArray));
回答by Darin Dimitrov
You could JSON serialize it. This way could could pass even more complex values and not worry about escaping simple quotes, double quotes, etc :
你可以用 JSON 序列化它。这种方式可以传递更复杂的值,而不必担心转义简单的引号、双引号等:
var categoriesList = <%= new JavaScriptSerializer().Serialize(new[] { "value1", "value2" }) %>;
Writing an HTML helper to do this would be even better:
编写一个 HTML 助手来做到这一点会更好:
public static class HtmlExtensions
{
public static string JsonSerialize(this HtmlHelper htmlHelper, object value)
{
return new JavaScriptSerializer().Serialize(value);
}
}
and then in your view:
然后在您看来:
<script type="text/javascript">
var categoriesList = <%= Html.JsonSerialize(new[] { "value1", "value2" }) %>;
</script>
回答by Omu
something like this:
像这样:
<script type="text/javascript">
var myArr = [<%=string.Join(",", strArr.Select(o => "\"" + o + "\"")) %>];
</script>
回答by Matthew Manela
You need to format the array into a JavaScript array syntax.
您需要将数组格式化为 JavaScript 数组语法。
var someArray = [<%= Model.SomeArray.Select(x => "'" + x +"'")
.Aggregate((x,y) => x + ", " + y); %>];
This will surround each entry by single quotes and then join them together with commas between square brackets.
这将用单引号将每个条目括起来,然后用方括号之间的逗号将它们连接在一起。
Updated: removed extra parenthesis.
更新:删除了额外的括号。
回答by ErwanLent
One liner:
一个班轮:
var data = [@Html.Raw(String.Join(",", Model.MyArray.Select(i => "'" + i + "'")))];
回答by Peyman Mehrabani
So easy, so simple
如此简单,如此简单
<script type="text/javascript">
var array = @Html.Raw(
Json.Encode(
(Model).Select(m=> new
{
id= m.ID,
name=m.Name
})
)
);
</script>
Output is:
输出是:
[{"id":1,"name":"Name of 1"}, {"id":2,"name":"Name of 2"}, ...];
回答by Mr. Ott
Using Json.NET
使用 Json.NET
var yourlist = JSON.parse('@Html.Raw(JsonConvert.SerializeObject(Model.YourList))');
回答by goldenratio
Just wanted to provide an answer using Razor syntax:
只是想使用 Razor 语法提供答案:
We have a Dictionary<int, int>
that we are rendering for a jQuery Sparkline, in the form of "an array of arrays".
我们有一个Dictionary<int, int>
以“数组数组”的形式为 jQuery Sparkline 渲染的对象。
var usageData = [ @string.Join(",", Model.UsageData.Select(d => string.Format("[{0},{1}]", d.Key, d.Value)).ToArray()) ];
Which is used like so:
像这样使用:
$('#sparkline').UsageSparkline(usageData, { tooltipFormatter: cachedTooltips });
This is what we get when viewing the source:
这是我们在查看源代码时得到的:
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 });