繁体   English   中英

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

[英]Converting a C# string array into a Javascript array

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

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

问题是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) {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM