将 2D 数组从 Code Behind 传递给 JavaScript

pass 2d array from code behind to javascript

本文关键字:JavaScript Behind Code 2D 数组      更新时间:2023-09-26

我有一个从数据库中获取的DataTable,我想在代码后面创建一个2d数组(一旦我得到DataTable..),然后将其作为2d数组传递给Javascript。

这是我尝试编码的内容:

int[,] videoQarray = new int[dt_questionVideo.Rows.Count,dt_questionVideo.Columns.Count ];
        string[,] videoQarrayTitle = new string[dt_questionVideo.Rows.Count, dt_questionVideo.Columns.Count ];
        for (var i = 0; i < dt_questionVideo.Rows.Count ; i++)
        {
            for (int j = 0; j < dt_questionVideo.Columns.Count; j++)
            {
                videoQarray[i,j] = Convert.ToInt32(dt_questionVideo.Rows[i][0]);
                videoQarrayTitle[i,j] = dt_questionVideo.Rows[i][1].ToString();   
            }
        }
        string createArrayScript = string.Format("var videQarray = [{0}];", string.Join(",", videoQarray));
        createArrayScript += string.Format("var videQarrayList = [{0}];", string.Join(",", videoQarrayTitle));
        Page.ClientScript.RegisterStartupScript(this.GetType(), "registerVideoQArray", createArrayScript, true);

好吧,在浏览器控制台中它说未定义videoQarray。我想知道我怎样才能正确地做到这一点..

变量可能是在函数中定义的,因此对于代码的其他部分是隐藏的。尝试使用"window.videoQArray"而不是"var":

string createArrayScript = string.Format("window.videQarray = [{0}];", string.Join(",", videoQarray));
createArrayScript += string.Format("window.videQarrayList = [{0}];", string.Join(",", videoQarrayTitle));

编辑:这是一个 2d 数组(好的,你在问题中写得很清楚,但我没有看到)。使用JavaScriptSerializer

var serializer = new JavaScriptSerializer();
string createArrayScript = string.Format("window.videQarray = {0};", serializer.Serialize(videoQarray));
createArrayScript += string.Format("window.videQarrayList = {0};", serializer.Serialize(videoQarrayTitle));

使用以下函数:

 public static string ArrayToString2D(string[,] arr)
    {
        StringBuilder str = new StringBuilder();
        str.Append("[['");
        for (int k = 0; k < arr.GetLength(0); k++)
        {
            for (int l = 0; l < arr.GetLength(1); l++)
            {
                if (arr[k, l] == null)
                    str.Append("','");
                else
                    str.Append(arr[k, l].ToString() + "','");
            }
            str.Remove(str.Length - 2, 2);
            str.Append("],['");
        }
        str.Remove(str.Length - 4, 4);
        str.Append("]]");
        return str.ToString();
    }

在代码隐藏中具有以下属性:

private string[,] upperLabels ;
    public string UpperLabel
    {
        get
        { return Utils.ArrayToString2D(upperLabels); }
    }

在JavaScript中使用以下:

var upperSplitted = <%=UpperLabel%> ;
var value = upperSplitted[0][0];