2

目前我有一个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);
    }

象素

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 函数中的值?

4

2 回答 2

3

您需要将 listOfInts 格式化为 javascript 数组。尝试在您的代码隐藏中添加一个属性,如下所示:

protected string IntsAsJSArray
{   
    get 
    {
        return string.Format("[{0}]", string.Join(",", listOfInts));
    }
}

然后在你的 ASPX 页面中

data: <%= IntsAsJSArray %>
于 2013-10-25T15:30:05.633 回答
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 文本的编码方式。

于 2013-10-25T16:26:02.610 回答