我在JavaScript
中有一些代码:
slider.setPhotos([
{ "src": "image1", "name": "n1" },
{ "src": "image2", "name": "n2" },
{ "src": "image3", "name": "n3" }
]);
我想从src
设置name
和C#
的值。
在C#
中假设值如下:
var images = new string[] {"/images/a1.jpg", "/images/a2.jpg", "/images/a3.jpg"};
var names = new string[] {"First", "Second", "Third"};
如何将这些值设置为JavaScript
代码(即在C#代码中的页面加载方法中)?
答案 0 :(得分:6)
在服务器上,您需要将数据序列化为JSON,然后您可以使用隐藏的输入字段将其作为HTML写入响应。
例如,您可以使用NewtonSoft JSON库来序列化JSON(内置于ASP MVC 4,但使用Nuget很容易安装)
string json = Newtonsoft.Json.JsonConvert.SerializeObject(images);
然后将json渲染为HTML(有很多方法可以做到这一点) e.g。
Response.Write(string.Concat("<input id='data' type='hidden' value='", json, "' />");
或
HiddenField jsonField = new HiddenField
{
ID = "data"
};
jsonField.Value = json;
this.Controls.Add(jsonField);
甚至直接写作脚本跳过需要解析客户端(我仍然倾向于使用HTML方法来避免回发/更新面板的任何问题导致脚本多次执行)
Response.Write(string.Concat("<script type='text/javascript'> var images = ", json, ";</script>");
在客户端上,您可以从HTML中读取此JSON并进行解析。在现代浏览器中,这是内置的,或者您可以使用JSON2
之类的内容进行填充e.g。
var field = document.getElenentById('data');
var images = JSON.parse(field.value);
然后,您可以将数据作为Javascript对象进行访问。
答案 1 :(得分:2)
假设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);
此代码将在您的页面加载时插入脚本块,之后您可以在客户端代码的任何位置使用该脚本块。