将C#字符串数组转换为Javascript数组

本文关键字:数组 Javascript 转换 字符串 | 更新日期: 2023-09-27 18:01:12

我将一个C#字符串数组传递到一个使用TagBuilder构建Javascript的方法中。在我的Javascript中,我似乎无法获得数组中的实际项目:

public static IHtmlString NewsTicker(this HtmlHelper htmlHelper, string[] arrTickerContents)
    {
        TagBuilder script = new TagBuilder("script");
        script.Attributes.Add("type", "text/javascript");
        script.InnerHtml = @"
            var rss_scr_contents = new Array();
            $.each('" + arrTickerContents + @"', function (i, objValue) {
                rss_scr_contents[i] = objValue;
        });
        return MvcHtmlString.Create(script.ToString());
    }

这导致了以下源代码:

var rss_scr_contents = new Array();
            $.each('System.String[]', function (i, objValue) {
                rss_scr_contents[i] = objValue;
        });

正确的语法是什么?

将C#字符串数组转换为Javascript数组

问题是arrTickerCountents.ToString()没有返回预期的结果。

例如,(new [] {"hello", "world"}).ToString()的求值结果为"System.String[]",这在这里没有用处。

处理这一问题的有效方法是使用一个转换,它可以从合适的.NET对象中发出有效的JavaScript值——最常见的工具可能是JSON转换器。我喜欢Json.NET,但它应该与其他转换器一起使用。

var jsonArray = JsonConvert.SerializeObject(arrTickerContents);
script.InnerHtml = @"
        var rss_scr_contents = [];
        $.each(" + jsonArray + @", function (i, objValue) {
            rss_scr_contents[i] = objValue;
        })
"; // Please make sure to post valid code

由于上面的循环不进行任何处理,请考虑更简单的替代方案。(我不喜欢使用具有全局窗口属性的var。(

script.InnerHtml = @"rss_scr_contents = " + jsonArray + ";";

我推荐JSON,因为它简单并且可以自动转换,尽管它可能并不总是适用的。手动构建JavaScript值(即没有JSON库(应该小心,因为它很容易引入无效、恶意或其他意外输出。

与其手动推出自己的解决方案,我建议使用Newtonsoft.Json.这样的库

http://james.newtonking.com/pages/json-net.aspx

为什么要重新发明轮子?

我在Razor中这样做,就像在NewtonSoft中一样。

var jsonArray=Newtonsoft.Json.JsonConvert.SerializeObject(arrTickerContents);
var rss_scr_contents = @Html.Raw(jsonArray);
$.each('[' + string.Join(',', arrTickerContents), + ']', function (i, objValue) {