将类似JSON的字符串从C#发送到javascript
我在将类似JSON的字符串从C#发送到javascript,c#,javascript,string,object,C#,Javascript,String,Object,我在JavaScript中有如下代码: slider.setPhotos([ { "src": "image1", "name": "n1" }, { "src": "image2", "name": "n2" }, { "src": "image3", "name": "n3" } ]); 我想从C#设置src和name的值 假设值与C#中的值类似: 如何将这些值设置为JavaScriptcode(即C#code中的页面加载方法)?在服务器上,您需要将数据序列
JavaScript
中有如下代码:
slider.setPhotos([
{ "src": "image1", "name": "n1" },
{ "src": "image2", "name": "n2" },
{ "src": "image3", "name": "n3" }
]);
我想从C#
设置src
和name
的值
假设值与C#
中的值类似:
如何将这些值设置为
JavaScript
code(即C#code中的页面加载方法)?在服务器上,您需要将数据序列化为JSON,然后可以使用类似于隐藏输入字段的内容将其作为HTML写入响应
例如,您可以使用JSON库来序列化JSON(它内置在中,但是使用Nuget很容易安装)
然后将json呈现到HTML中(有很多方法可以做到这一点)
e、 g
或者甚至直接作为脚本编写,而不需要在客户端进行解析(我仍然倾向于使用HTML方法来避免回发/更新面板导致脚本多次执行的任何问题)
然后您可以作为Javascript对象访问数据。假设
图像
和名称
长度相同
你可以用这个
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);
StringBuilder str=new StringBuilder();
var images=newstring[]{“/images/a1.jpg”、“/images/a2.jpg”、“/images/a3.jpg”};
变量名称=新字符串[]{“第一”、“第二”、“第三”};
str.AppendLine(“slider.setPhotos([”);
对于(int i=0;i
此代码将在加载页面时插入一个脚本块,之后您可以在客户端代码中的任何位置使用该脚本块。简单地使用ajax来获取该脚本块如何?您甚至可以生成一个定义数据的脚本标记,而不必担心获取元素或解析它。@Rawling,没错,我的答案就是这个方法。Tnx@ChrisHerring。回答得很好。
string json = Newtonsoft.Json.JsonConvert.SerializeObject(images);
Response.Write(string.Concat("<input id='data' type='hidden' value='", json, "' />");
HiddenField jsonField = new HiddenField
{
ID = "data"
};
jsonField.Value = json;
this.Controls.Add(jsonField);
Response.Write(string.Concat("<script type='text/javascript'> var images = ", json, ";</script>");
var field = document.getElenentById('data');
var images = JSON.parse(field.value);
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);