使用C#代码动态创建JavaScript数组

5

我正在将一个古老的经典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,但是这有点琐碎。概念性问题在于,该数组是字符串和整数的混合体,我不确定如何重新创建它,那么怎么办?


1
你需要一个与你的C#数组完全相同的JavaScript var数组吗? - Erick Petrucelli
4
我建议你不要像这样直接将服务器数据注入到JavaScript中。可以通过Ajax调用获取数据,或者将其直接注入到HTML中,并使用JavaScript逐步增强HTML。 - Raynos
3个回答

16

你应该这样做:

代码后台:

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>
希望这可以帮到你。干杯。

1
最佳答案是给出的帖子明显没有任何意图实现任何形式的rest/json服务。 - Steve
将此与Linq结合使用使得在需要时在我的MVC视图中执行此操作变得非常容易!谢谢! - KallDrexx

1
我认为一个包含你的项目的 List<List<object>>,通过 JavaScriptSerializer 进行传递 就可以解决问题了。考虑到这些数据可能来自于更结构化的数据类型,你可能可以找到比 List<List<object>> 更好的方法,但是 JavaScriptSerializer 可能是你想要的。

0

这个能行吗?

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转义层。 - spender

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接