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

MSa*_*adi 5 javascript c# string object

我有这样的代码JavaScript:

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

我想设置srcname来自的值C#.

假设值如下所示C#:

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

var names = new string[] {"First", "Second", "Third"};
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*ing 6

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

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

string json = Newtonsoft.Json.JsonConvert.SerializeObject(images);
Run Code Online (Sandbox Code Playgroud)

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

Response.Write(string.Concat("<input id='data' type='hidden' value='", json, "' />");
Run Code Online (Sandbox Code Playgroud)

要么

HiddenField jsonField = new HiddenField
{
    ID = "data"
};
jsonField.Value = json;
this.Controls.Add(jsonField);
Run Code Online (Sandbox Code Playgroud)

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

Response.Write(string.Concat("<script type='text/javascript'> var images = ", json, ";</script>");
Run Code Online (Sandbox Code Playgroud)

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

例如

var field = document.getElenentById('data');
var images = JSON.parse(field.value);
Run Code Online (Sandbox Code Playgroud)

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