将数组从 MVC 传递给 javascript?

IT技术 javascript asp.net-mvc
2021-02-26 02:38:52

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

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

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

6个回答

您可以使用这行简单的代码让 .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)来代替。
2021-04-20 02:38:52
这太神奇了!不知道这在 Razor 中得到支持,太好了!
2021-04-28 02:38:52

你可以用 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>
每次看到 Darin Dimitrov 回答问题时,我就知道我会有一个解决方案。谢谢!
2021-04-28 02:38:52
我不得不承认这是一种比我的答案更简洁的方法。这应该被投票为解决方案,而不是我的帖子。
2021-05-02 02:38:52
@Adrian,一切都是主观的。我个人讨厌在视图中看到 C#。而且我对视图中的循环特别过敏 :-) 也不对您输出的字符串进行编码是非常危险的,并且会受到 XSS 攻击。这就是为什么我更喜欢始终依赖框架中内置的东西,这样我就不必担心正确转义,......
2021-05-16 02:38:52

这应该做

var someArray=[<%foreach (var s in myStringArray){%>'<%=s%>',<%}%>];
你必须去掉最后一个逗号
2021-05-05 02:38:52
@Omu:不一定。Javascript 解析器在该领域非常宽容。所有常见的浏览器都不介意数组中的尾随逗号。
2021-05-07 02:38:52
@AdrianGrigore,感谢您的回答..我有同样的问题。但是我从你的回答中找到了一种在 Js 中传递 mvc attary 的方法。但我的问题是这种类型的数组需要哪种类型的数组或类,请参阅我的问题:stackoverflow.com/questions/31911067/...
2021-05-13 02:38:52

像这样:

<script type="text/javascript">
var myArr = [<%=string.Join(",", strArr.Select(o => "\"" + o + "\"")) %>];
</script>
如果o包含报价怎么办?如果它包含双引号怎么办?如果它包含可以窃取您的身份验证 cookie 的 javascript 和 XSS 代码怎么办?甚至无法想象编写这样的代码会造成什么样的灾难。
2021-04-19 02:38:52
@Matthew Manela 感谢您告诉我,已修复
2021-04-21 02:38:52
这个的问题在于它没有将字符串值包装在引号中,这会导致 JavaScript 错误。
2021-04-23 02:38:52
@Darin Dimitrov 好吧,你的权利,这只是一个简单的方法,可能他不需要编码,谁知道
2021-05-16 02:38:52

一个班轮:

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