将数组从MVC传递到javascript?

时间:2010-10-03 18:16:00

标签: javascript asp.net-mvc

我可以使用以下命令从MVC ASP.NET传递变量:

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

这对字符串或整数工作正常,但如何处理字符串数组?我试图以相同的方式传递数组,但变量设置为System.String []?

9 个答案:

答案 0 :(得分:151)

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

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

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

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

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

答案 1 :(得分:43)

你可以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>

答案 2 :(得分:14)

这应该

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

答案 3 :(得分:3)

类似的东西:

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

答案 4 :(得分:2)

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

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

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

更新:删除了额外的括号。

答案 5 :(得分:2)

单线:

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

答案 6 :(得分:2)

如此简单,如此简单

<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"}, ...];

答案 7 :(得分:1)

使用Json.NET

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

答案 8 :(得分:0)

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

我们正在以“数组数组”的形式呈现jQuery Sparkline的Dictionary<int, int>

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