2011-05-07 80 views
4

我正在将旧的经典ASP网站更新为新的.net 3.5版本。该页面有客户(我的老板)想要保留的自定义列表控件。这个列表控件需要几个数组才能正常工作。该数组是出版物的多维列表。这看起来是这样的:动态创建JavaScript数组后面的c#代码

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

你需要一个JavaScript''var'与你的C#数组完全一样的数组? – 2011-05-07 00:35:48

+4

我建议你不要直接将数据从服务器注入到JavaScript中。要么通过某种Ajax调用获取这些数据,要么直接将其注入到HTML中,并用JavaScript逐步增强hTML。 – Raynos 2011-05-07 00:37:12

回答

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))); 

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

+0

如果字符串包含反斜杠或引号或类似字符,可能会变得混乱。真的需要一个Javascript转义层来使它无懈可击。 – spender 2011-05-07 00:44:36

1

我认为一个List<List<object>>包含您的项目,passed through the JavaScriptSerializer会做的伎俩。由于这些数据可能来自更具结构化的数据类型,因此您可能比List<List<object>>做得更好,但JavaScriptSerializer可能就是您要做的。

15

你应该这样做:

后面的代码:

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

最好的答案给海报显然无意实施任何形式的休息/ JSON服务。 – Steve 2011-06-08 00:17:01

+0

将这与Linq相结合,使得在需要时在我的MVC视图中执行此操作变得非常容易!谢谢! – KallDrexx 2011-10-20 15:47:09

+0

不客气。很高兴帮助你。 – 2011-11-16 18:04:08