将数组从 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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-23 06:22:36  来源:igfitidea点击:

Pass Array from MVC to javascript?

javascriptasp.net-mvc

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