从后面的代码传递List <int>以在Javascript函数中使用</int>

时间:2013-10-25 15:20:18

标签: c# javascript asp.net

目前我有一个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函数中的值?

2 个答案:

答案 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文本的编码。