使用JavaScript循环遍历C#数组中的值

3

好的,我已经在c#中创建了一个数组,并希望在javascript循环中访问这些值。这是我的全局c#变量:

protected int count;
protected string[] arr = new string[20];

我在这里将字符串值添加到数组中,比如在 Page_Load() 事件中。

以下是我的理想 JavaScript 代码:

var count = <%= count %>;
for (var i = 0; i < count; i++) 
{
document.write(<%= arr[i] %>);
}

现在如果我只使用arr[0],那么会弹出arr[0]的正确信息,所以我知道这部分是正确的,但是有没有办法在<%= %>标签中使用javascript变量“i”呢?

4个回答

5

这段代码中的ASP.NET部分在服务器上执行,而JavaScript在浏览器中执行。服务器只看到JavaScript作为文本,它是没有意义和功能的。只有当浏览器接收页面并解释JS时,它才会被执行。

请记住,服务器和客户端PC是通过网络连接的两个不同的系统。如果您想从A系统处理数据并在B系统上使用,您需要将数据发送到B。

如果您想将数组中的数据发送到浏览器,以便可以在某些JavaScript中使用它,则需要序列化该数组。

类似于这样:

var myArray = <% = new JavaScriptSerializer().Serialize(serverSideArray) %>;
for(var i = 0; i < myArray.length; i++) {
    document.write(myArray[i]);
}

3

希望这对您有用......在我的测试中它运行良好。

    <script language ="javascript">
        var count = <%= count %>;
        alert(count);

        <%
           for(int i=0;i<count;i++){
         %>
            document.write(<%= arr[i] %>);
        <%}%>

    </script>

我发现的一件事是,在 .aspx 的 Javascript 部分使用服务器标记会导致 IDE 失效(即,它停止执行很酷的操作,如将 Javascript 块捕捉到位)。我已经学会了这样做:var count = parseInt("<%=count %>");我知道它看起来有点像 hackish,但我还没有找到其他方法可以防止 IDE 认为客户端代码中存在错误。 - oscilatingcretin
是的,我只是按照主题写了它。在我的项目中,我将:1. 在.cs文件中创建一个字符串,如“['a','b','c']”;2. 输入一个隐藏值;3. 在js中,var arr = eval(hidden.value);4. 使用它... - shenhengbin

0
我知道这样说可能会招来批评,但还是要说一下:
服务器端:
protected void Page_Load(object sender, EventArgs e)
{
    string[] arr = new string[] { "1", "2", "3" };

    StringArr = string.Join(",", arr.Select(a => string.Format("\"{0}\"", a)).ToArray());
}

protected string StringArr;

客户端:
<script language="javascript" type="text/javascript">
    var arr = [<%=StringArr %>];

    alert(arr.length);
</script>

让嘲笑开始吧。

0

很遗憾,我不这么认为;因为Javascript在浏览器中是在运行时评估的,但服务器块在服务器上编译时评估。

您可以扩展C#服务器块的范围,并循环遍历arr。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接