javascript - 在 jQuery : equivalent to Html. Raw() 中将字符串从服务器转换为 HTML?

标签 javascript c# jquery asp.net asp.net-mvc

我有一个简单的图表(使用 Chartist,但这与我的问题无关)。到目前为止,我已经为它加载了如下数据:

 <script>
        (function () {
            if ($('#ChartistDebtChart').get(0)) {
                var options = {                    };

                new Chartist.Line('#ChartistDebtChart', {
                     labels: [@Html.Raw(String.Join(", ", Model.Debt.BalanceOverTime.Select(c=> @"'" + c.Item1 + @"'").ToList()))],
                    series: [
                         [@Html.Raw(String.Join(", ", Model.Debt.BalanceOverTime.Select(c=>  ((int)c.Item2)).ToList()))],
                    ]
                }, options);
            }
        })();

        </script>

这将呈现如下内容:

 new Chartist.Line('#ChartistDebtChart', {
                     labels: ['13-02-2018', '16-03-2018', '13-04-2018', '13-04-2018'],
                    series: [
                         [9000, 9056, 9156, 9256],
                    ]
                }, options);

哪个工作完美!

但是,如果我在从后端获取数据的地方执行相同的操作。我将使用 jQuery 从我们的 Controller 执行 GET。当我们写入此数据时,'13-02-2018'、'16-03-2018'、'13-04-2018'、'13-04-2018' 不会被视为 HTML 并且图表中未显示数据。

所以我的问题是:在 jQuery 中使用 GET 时,如何将后端字符串视为 HTML?

我尝试了以下方法:

尝试 1:在列表上使用 Map:

  new Chartist.Line('#DebtDeteriorationGraph', {
                labels: [result.DebtDeteriorationOverTime.map(item => item.Item1).join(", ")],
                series: [
                    ['70000','55000','45000','30000','25000','20000']
                ]
            }, options);

硬编码 y 值以使其变得简单,我尝试了 result.DebtDeteriorationOverTime.map(item => item.Item1).join(", ") 将其视为一个字符串而不是多个。

尝试 2:从服务器提供准确的字符串:

我制作了一个字符串,它应该是这样的 ('13-02-2018', '16-03-2018', '13-04-2018', '13-04-2018'),然后像这样插入:

  new Chartist.Line('#DebtDeteriorationGraph', {
                    labels: [result.DebtDeteriorationOverTimeLabelString],
                    series: [
                        ['70000','55000','45000','30000','25000','20000']
                    ]
                }, options);

这在 x 轴上也被视为“1 项”。

尝试 3:从服务器获取字符串并尝试解析为 HTML

var htmlRes = $('<div/>').html(result.DebtDeteriorationOverTimeLabelString).text();
                    new Chartist.Line('#DebtDeteriorationGraph', {
                        labels: [htmlRes],
                        series: [
                            ['70000','55000','45000','30000','25000','20000']
                        ]
                    }, options);

所有 3 次尝试都被视为字符串,因此与我从 C# 运行 Html.Raw() 时的效果不同。

有什么想法吗? :-)

最佳答案

您正在尝试让您的响应被视为“HTML”,但您并不真正需要它。 labels 是 javascript 数组(字符串),因此您需要 javascript 数组,其中每个项目代表一个标签。最近的尝试是:

labels: [result.DebtDeteriorationOverTime.map(item => item.Item1).join(", ")]

产生一个字符串的 javascript 数组。相反,您需要:

labels: result.DebtDeteriorationOverTime.map(item => item.Item1)

因为 DebtDeteriorationOverTime 已经是数组,但不是你需要的,所以你使用 map 来生成你需要的数组。无需在 [] 中加入任何内容或包含任何内容。

请注意,您还可以从您的 api 返回表示图表信息(带有 labelsseries 属性)的整个 json 对象。然后你可以这样做:

new Chartist.Line('#ChartistDebtChart', result.chartData, options);

关于javascript - 在 jQuery : equivalent to Html. Raw() 中将字符串从服务器转换为 HTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49855857/

相关文章:

c# - 字段初始值设定项不能引用非静态字段、方法或属性

c# - 如何在运行时向属性添加属性

javascript - IE 8 的条件注释不起作用

javascript - 从自动完成地址输入中获取纬度和经度,并使用谷歌地图 API 显示下面的 map

javascript - jQuery - 防止跳转但遵循散列链接

javascript - Angular uiRouter 在新窗口或带有 stateParams 的选项卡中打开状态

c# - 是否可以使用 JSON.Net 将 JSON 反序列化为 List<MyObject<T,K>>

jquery - Simplemodal iframe 表单 - 提交到父窗口

javascript - 检查某个项目是否已在数组中的正确 jquery 语法是什么?这是一个简单的例子

javascript - 将 Prop 从一个组件传递到另一个组件时,对象作为 react 子组件(找到带有键的对象)无效