JavaScript - MVC.NET:获取Multimensional Array的价值

时间:2014-07-23 21:18:02

标签: javascript arrays asp.net-mvc

我试图在JavaScript上获取多维int[][]数组的值。

数组在Controller类中初始化,并通过名为hdn_l_asuetos的隐藏输入元素中的View类传递给JS。

问题是我需要将int[][]数组迭代到de JavaScript文件中,但我不能。 这是我的JS代码:

var natDays = $('#hdn_l_asuetos').val();

function nationalDays(date, inMonth) {
    if (inMonth) {
        for (i = 0; i < natDays.length; i++) {
            alert("MES " + natDays[i][0]);
            alert("DIA " + natDays[i][1]);
            if (date.getMonth() + 1 == natDays[i][0] &&
                    date.getDate() == natDays[i][1]) {
                return {selectable: false};
            }
        }
    }
    return {};
}

我得到了这个结果:

MES S
DIA undefined
MES y
DIA undefined
MES s
DIA undefined
MES t
DIA undefined
MES e
DIA undefined
MES m
DIA undefined
MES .
DIA undefined
MES I
DIA undefined
MES n
DIA undefined
MES t
DIA undefined
MES 3
DIA undefined
MES 2
DIA undefined
MES [
DIA undefined
MES ]
DIA undefined
MES [
DIA undefined
MES ]
DIA undefined

有了这个,我可以看到var natDays = $('#hdn_l_asuetos').val();在位置0返回hdn_l_asuetos,System.Int32 [] []的类型。

我将非常感谢迭代int[][]数组的任何帮助。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

您正在以正确的方式访问多维数组元素

arr[i][j]

然而,当你在做

var natDays = $('#hdn_l_asuetos').val();

您获得的字符串为natDays

我认为你是在服务器端做到的:

System.Int32[][] myArr = ....

and in razor view

... @myArr

有效执行

myArr.ToString()

您在输入控件中收到"System.Int32[][]"

你应该做的是JSON在服务器端序列化你的数组,然后在客户端反序列化

//in view
@Html.Raw(Json.Encode(myArr))


//js 
var natDaysJson = $('#hdn_l_asuetos').val();
var natDays = JSON.parse(natDaysJson)

然后所有剩余的代码将保持不变

或者,如果这段javascript存在于剃刀视图中,您可以直接将数组分配给变量

var natDays = @Html.Raw(Json.Encode(myArr))

这样,当渲染视图时,你将把数组作为对象文字:

var natDays = [ [ 1,2,3] , [4,5,6]... ]

答案 1 :(得分:0)

尝试使用JSON将双数组值字符串化为字符串,然后再将其分配给输入值,然后在检索它时,使用JSON将其解析回来。如果你只是将double数组值分配给元素的value属性,它就不会工作,因为它只能存储字符串。你得到的可能是以错误的方式解释为字符串的数组。