将类似JSON的字符串从C#发送到javascript

我在JavaScript有一些代码如下:

 slider.setPhotos([ { "src": "image1", "name": "n1" }, { "src": "image2", "name": "n2" }, { "src": "image3", "name": "n3" } ]); 

我想从C#设置srcname的值。

假设C#值是这样的:

 var images = new string[] {"/images/a1.jpg", "/images/a2.jpg", "/images/a3.jpg"}; var names = new string[] {"First", "Second", "Third"}; 

如何将这些值设置为JavaScript代码(即在C#代码中的Page Load方法中)?

在服务器上,您需要将数据序列化为JSON,然后您可以使用类似隐藏输入字段的内容将其作为HTML写入响应中。

例如,您可以使用NewtonSoft JSON库来序列化JSON(它内置到ASP MVC 4中,但使用Nuget很容易安装)

 string json = Newtonsoft.Json.JsonConvert.SerializeObject(images); 

然后将json渲染为HTML(有很多方法可以做到这一点),例如

 Response.Write(string.Concat(""); 

要么

 HiddenField jsonField = new HiddenField { ID = "data" }; jsonField.Value = json; this.Controls.Add(jsonField); 

甚至直接写作脚本跳过需要解析客户端(我仍然倾向于使用HTML方法来避免回发/更新面板的任何问题导致脚本被执行多次)

 Response.Write(string.Concat(""); 

在客户端上,您可以从HTML中读取此JSON并进行解析。 在现代浏览器中,这是内置的,或者您可以使用JSON2之类的东西进行填充

例如

 var field = document.getElenentById('data'); var images = JSON.parse(field.value); 

然后,您可以将数据作为Javascript对象进行访问。

假设imagesnames长度相同您可以使用它

 StringBuilder str = new StringBuilder(); var images = new string[] {"/images/a1.jpg", "/images/a2.jpg", "/images/a3.jpg"}; var names = new string[] {"First", "Second", "Third"}; str.AppendLine("slider.setPhotos(["); for(int i=0; i< images.Length; i++) { str.AppendLine("{ \"src\": "+ images[i] +", \"name\": "+ names[i] +" }"); str.AppendLine( (i==images.Length-1 ? "]);":",")); } Page.ClientScript.RegisterClientScriptBlock( this.GetType(), "Key007", str.ToString(), true); 

此代码将在您的页面加载时插入脚本块,之后您可以在客户端代码中的任何位置使用该脚本块。