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

标签 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;
        });

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

最佳答案

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

关于c# - 将 C# 字符串数组转换为 Javascript 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15099984/

相关文章:

javascript - 使用 google Sheets javascript 添加而不将其发布给公众

jquery - 如何防止用户在等待ajax响应时进行交互?

javascript - 绘制多个可拖动的圆圈 HTML5 Canvas

javascript - JQuery悬停功能不显示警报消息

c# - .Net Core 2.0 中 Controller 和 BaseController 中的依赖注入(inject)重复

c# - VSCode 中的 DotNet 核心 3.0 编译问题

javascript - 如何使用 JavaScript 为另一个域设置 cookie?

javascript - 无法在 D3 中为每个数据集添加多个元素

c# - 用c#实现Java RSA解密和加密

c# - 在依赖解析期间获取类类型