将类似JSON的字符串从C#发送到javascript
我在JavaScript
有一些代码如下:
slider.setPhotos([ { "src": "image1", "name": "n1" }, { "src": "image2", "name": "n2" }, { "src": "image3", "name": "n3" } ]);
我想从C#
设置src
和name
的值。
假设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对象进行访问。
假设images
和names
长度相同您可以使用它
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);
此代码将在您的页面加载时插入脚本块,之后您可以在客户端代码中的任何位置使用该脚本块。