【问题标题】:Building JavaScript Array in C#, apostrophes changing在 C# 中构建 JavaScript 数组,撇号改变
【发布时间】:2017-05-05 12:55:46
【问题描述】:

我这样做是为了从 int、double 和 string 列表构建 JavaScript 数组。

public string listToJsArray<T>(List<T> cslist)
    {
        bool numeric = true;
        if(
            !(typeof(T)==typeof(int)
            || typeof(T) == typeof(string)
            || typeof(T) == typeof(double))
            )
        {
            throw (new ArgumentException(message: "Only int, double and string are supported"));
        }
        if(typeof(T)==typeof(string))
        {
            numeric = false;
        }
        string JsArray = "[";

        for(int i=0;i<cslist.Count;i++)
        {
            string dataWithSurrendings = cslist[i].ToString();
            if(!numeric)
            {
                dataWithSurrendings = "'" + cslist[i].ToString() + "'";
            }
            if(i !=0)
            {
                dataWithSurrendings = "," + dataWithSurrendings;
            }
            if(i +1==cslist.Count)
            {
                dataWithSurrendings = dataWithSurrendings + "]";
            }
            JsArray += dataWithSurrendings;

        }

        return JsArray;
    }

我的问题是当传递一个字符串列表时,撇号变成&amp;#39;

例如,{"1","2","3","4","5","6","7"} 的列表变为: [&amp;#39;1&amp;#39;,&amp;#39;2&amp;#39;,&amp;#39;3&amp;#39;,&amp;#39;4&amp;#39;,&amp;#39;1&amp;#39;,&amp;#39;6&amp;#39;,&amp;#39;7&amp;#39;]

这个函数需要做哪些修改,才能在 JavaScript 中返回正确的数组?

没有一个解决方案能解决问题。使用 JsonConvert 我得到几乎相同的结果。问题是视图编辑器中的单引号或双引号与 CS 字符串的编码不同。

【问题讨论】:

  • 为什么不直接使用JSON呢?
  • 特别是NewtonSoft.Json
  • 不要 - 带你原始集合并将其序列化为 JSON。现在你有了 Javascript 数组。 JSON 是 Javascript 的子集,因此如果您输出类似 "var myArray = " + JsonConvert.SerializeObject(csList) + ";" 的内容,您将得到所需的内容
  • @George:JSON 是 Javascript 的子集。任何放入 &lt;script&gt; 标记的 JSON 都是有效的 Javascript。它甚至不需要解析。

标签: javascript c# asp.net-mvc


【解决方案1】:

我假设您这样做是为了进入某个网页,例如:

<script>
    @{
        var output = listToJsArray(Model.SomeList);
    }
    var myArray = @Html.Raw(output);
    // some Javascript using that array
</script>

不要浪费时间尝试自己做。这是一种痛苦,你正在重新发明轮子。 JSON 是有效的 Javascript,将数组序列化为 JSON 与 Javascript 数组字面量完全相同。所以使用Javascript。 JSON.Net 在这里非常有用:

<script>
    @{
        var output = Newtonsoft.Json.JsonConvert.SerializeObject(Model.SomeList);
    }
    var myArray = @Html.Raw(output);
    // some Javascript using that array
</script>

序列化程序将为您处理所有烦人的转义、特殊字符和边缘情况。

【讨论】:

  • @Html.Raw 单独解决了我的问题。当然你的答案是完全正确的。
猜你喜欢
  • 1970-01-01
  • 2021-03-27
  • 1970-01-01
  • 2011-12-22
  • 2020-09-20
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
  • 2019-07-31
相关资源
最近更新 更多