将数组从MVC传递到javascript?

Ban*_*hee 50 javascript asp.net-mvc

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

var lastCategoryId = '<%=Model.CS.LastSelectedCategory %>';
Run Code Online (Sandbox Code Playgroud)

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

小智 157

您可以通过这一系列简单的代码让.NET为您处理所有繁重的工作.

这假设您使用的是MVC Razor语法.

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

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

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

  • 请注意,`Json.Encode()`不再适用于较新版本的MVC.请使用`Json.Serialize(Model.YourDotNetArray)`. (4认同)

Dar*_*rov 43

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

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

编写HTML帮助程序来做到这一点会更好:

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

然后在你看来:

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

  • 我不得不承认这比我的回答更清晰.这应该被投票作为解决方案,而不是我的帖子. (6认同)
  • @Adrian,一切都是主观的.就个人而言,我讨厌在视图中看到C#.而且我对视图中的循环特别敏感:-)也不编码你输出的字符串是非常危险的,并受到XSS攻击.这就是为什么我更喜欢总是依赖框架中内置的东西,这样我就不必担心正确的转义,...... (2认同)

Adr*_*ore 15

这应该做

var someArray=[<%foreach (var s in myStringArray){%>'<%=s%>',<%}%>];
Run Code Online (Sandbox Code Playgroud)