目前我有一个Javascript函数,它使用我可以硬编码的代码 -
data: [1,4,7,9]
但是我希望传入一个整数列表来设置类似 -
之类的代码中的值C#代码背后
public List<int> listOfInts = new List<int>();
protected void Button1_Click(object sender, EventArgs e)
{
listOfInts.Add(1);
listOfInts.Add(4);
listOfInts.Add(7);
listOfInts.Add(9);
ScriptManager.RegisterStartupScript(this, GetType(), "blah", "JSfunction()", true);
}
.aspx的
data: <% = listOfInts %>
然而,这会打破错误 -
0x800a1391 - Microsoft JScript runtime error: 'JSfunction' is undefined
如果我删除上述行并在函数中执行此操作(不会像我需要的那样从代码中传递任何内容) -
var listOfInts = new Array();
listOfInts[0] = 1;
listOfInts[1] = 2;
listOfInts[2] = 3;
listOfInts[3] = 4;
然后设置 -
data: [listOfInts[0],listOfInts[1],listOfInts[2],listOfInts[3]]
这很好用。如何从后面的代码中传递值以填充Javascript函数中的值?
答案 0 :(得分:3)
您需要将listOfInts格式化为javascript数组。尝试在代码隐藏中添加一个属性,如下所示:
protected string IntsAsJSArray
{
get
{
return string.Format("[{0}]", string.Join(",", listOfInts));
}
}
然后在你的ASPX页面
data: <%= IntsAsJSArray %>
答案 1 :(得分:2)
一种更通用的方法来做到这一点......在我看来,明显更好的方法是编写适用于你需要做的任何对象的东西。请考虑以下扩展方法......
public static T FromJson<T>(this string jsonData, Encoding encoding = null)
where T : class
{
encoding = encoding ?? Encoding.Default;
var deserializer = new DataContractJsonSerializer(typeof(T));
var buffer = encoding.GetBytes(jsonData);
using (var stream = new MemoryStream(buffer))
{
return deserializer.ReadObject(stream) as T;
}
}
public static string ToJson<T>(this T obj, Encoding encoding = null)
where T : class
{
encoding = encoding ?? Encoding.Default;
var serializer = new DataContractJsonSerializer(typeof(T));
using (var stream = new MemoryStream())
{
serializer.WriteObject(stream, obj);
return encoding.GetString(stream.ToArray());
}
}
在您的情况下,用法看起来像这样......
data: <% = listOfInts.ToJson() %>
无论您在asp.net端是否有List,Int []或任何其他对象,这都有效。另外,不要忘记考虑JSON文本的编码。