如何访问javascript中从控制器传递的数组列表的元素?

时间:2009-08-21 12:52:27

标签: c# asp.net-mvc

我正在使用Asp.net MVC并且在控制器中我有一个生成数组列表的函数,即List,在将其转换为视图后,我将其返回到视图页面。在视图页面中,我正在转换它按以下代码列出:

          <% List<string[]> items = (List<string[]>)ViewData["Items"];  %>

现在我想在javascript中使用for / foreach语句逐个访问属于列表的每个数组中的元素。我正在尝试以下代码:

            var j;
            for(j=0;j<'<%=items.Count%>';j++)
            {
                   alert('<%=items['+j+'].GetValue(0).ToString()%>');
                   ..........                                         
            }  

但是,我收到错误:“字符文字中的字符过多”。如果我使用以下代码,那么它工作正常:

                    alert('<%=items[0].GetValue(0).ToString()%>'); 

但是我想动态地使用它。有没有办法做这个操作?请帮帮我。谢谢。                                                                    ARKA

2 个答案:

答案 0 :(得分:2)

您需要将服务器端列表对象序列化为javascript数组:

序列化对象的示例C#函数:

protected string SerializeToJson(List<string[]> list) {
        if ( list != null && list.Count > 0 ) {
            var stream = new MemoryStream();
            var jsSerializer = new DataContractJsonSerializer(list.GetType());
            jsSerializer.WriteObject(stream, list);

            return Encoding.UTF8.GetString(stream.ToArray());
        }
        return string.Empty;
    }

用法示例(内联调用C#JSON序列化函数的JavaScript):

// the following call will return JSON array [["a","b"]]
var arrayFromServer = <%= SerializeToJson(new List<string[]> { new [] {"a", "b"}};) %>;

这是你要求的吗?

答案 1 :(得分:0)

在此方案中,您只能在服务器端处理列表中的元素。