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

时间:2013-02-26 21:47:55

标签: c# javascript jquery

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

执行此操作的正确语法是什么?

4 个答案:

答案 0 :(得分:1)

问题是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库),因为它很容易引入无效,恶意或其他意外的输出。

答案 1 :(得分:1)

我建议使用像Newtonsoft.Json这样的库,而不是手动推出自己的解决方案。

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

为什么重新发明轮子?

答案 2 :(得分:0)

$.each('[' + string.Join(',', arrTickerContents), + ']', function (i, objValue) {

答案 3 :(得分:0)

我是通过RazorNewtonSoft中做到这一点的。

var jsonArray=Newtonsoft.Json.JsonConvert.SerializeObject(arrTickerContents);
var rss_scr_contents = @Html.Raw(jsonArray);