【问题标题】:Dynamically create javascript array with c# code behind使用 c# 代码动态创建 javascript 数组
【发布时间】:2011-08-20 13:42:28
【问题描述】:

我正在将旧的经典 ASP 站点更新为新的 .net 3.5 版本。该页面有一个客户(我的老板)想要保留的自定义列表控件。此列表控件需要多个数组才能正常工作。该数组是出版物的多维列表。这是它的样子:

var publicationTable = [
    [31422,"Abilene Reporter News","Abilene","TX",false,"D",0],
    [313844,"Acadiana Weekly","Opelousas","LA",false,"W",1],
    [527825,"Action Advertiser","Fond du Lac","WI",false,"W",2]...n]

我想在服务器端生成这个数组并注册它。我看过msdn,但这有点微不足道。概念上的问题是数组是字符串和整数的混合体,我不知道如何重新创建它,那么如何?

【问题讨论】:

  • 您需要一个 JavaScript var,其数组与您的 C# 数组完全相同?
  • 我建议您不要像这样直接将来自服务器的数据注入 JavaScript。要么通过某种 ajax 调用获取这些数据,要么将其直接注入 HTML 并使用 javascript 逐步增强 hTML。

标签: c# javascript asp.net serialization


【解决方案1】:

你应该这样做:

后面的代码:

using System.Web.Script.Serialization;
...
public string getJson(){
   var publicationTable = new List<object>{
      new []{ 31422,"Abilene Reporter News","Abilene","TX",false,"D",0},
      new []{ 313844,"Acadiana Weekly","Opelousas","LA",false,"W",1 },
      new []{ 527825,"Action Advertiser","Fond du Lac","WI",false,"W",2}
   };
   return (new JavaScriptSerializer()).Serialize(publicationTable);
}

如您所见,要创建一个混合类型数组,我们使用new [] 创建一个匿名类型数组。您也可以使用 new object[] 来完成。

aspx 文件:

<script>
    var publicationTable = <%= getJson() %>;
</script>

希望这会有所帮助。干杯

【讨论】:

  • 鉴于发布者显然无意实施任何类型的 rest/json 服务的最佳答案。
  • 将它与 Linq 结合起来,在需要时在我的 MVC 视图中执行此操作变得非常容易!谢谢!
【解决方案2】:

我认为包含您的项目的List&lt;List&lt;object&gt;&gt; passed through the JavaScriptSerializer 可以解决问题。鉴于此数据可能来自更结构化的数据类型,您可能比List&lt;List&lt;object&gt;&gt; 做得更好,但JavaScriptSerializer 可能是您所追求的。

【讨论】:

    【解决方案3】:

    这行得通吗?

    ArrayList list = new ArrayList{31422,"Abilene Reporter News","Abilene","TX",false,"D",0};
    
    var str = string.Format("[{0}]", list.Cast<object>().Select(x => (x is string)?
              string.Format(@"""{0}""", x) : x.ToString())
              .Aggregate((x, y) => string.Format("{0}, {1}", x, y)));
    

    它可以以类似的方式扩展为多维数组。

    【讨论】:

    • 如果字符串包含反斜杠或引号或类似内容,可能会变得混乱。真的需要一个 Javascript 转义层来使其防弹。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 2018-12-18
    • 2013-05-06
    • 2020-08-04
    • 2013-03-26
    • 2010-09-19
    相关资源
    最近更新 更多