You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WebForm中ArrayList转JS数组报错:当前上下文中不存在'arlist1'

问题原因及解决方案

错误原因分析

你遇到的「当前上下文中不存在名称‘arlist1’」错误,以及数据传递失败,主要有两个核心问题:

  1. 后端变量作用域问题:你在Page_Load方法内定义的arlist1是局部变量,前端的<%= arlist1 %>只能访问页面类的protected/public成员变量,无法读取方法内的局部变量。
  2. RegisterArrayDeclaration用法错误:这个方法是用来逐个添加JS数组元素的(比如RegisterArrayDeclaration("arlist1", "'Bill'")),而非直接传入序列化后的JSON字符串,直接传JSON会导致生成的JS代码语法错误。

解决方案一:页面成员变量+JSON序列化

后端代码修改

把需要传递的数据序列化为JSON字符串,并定义为页面类的protected成员,让前端可以访问:

public partial class JSPassData : System.Web.UI.Page
{
    // 定义为页面protected成员,供前端模板访问
    protected string ArlistJson;

    protected void Page_Load(object sender, EventArgs e)
    {
        ArrayList arlist1 = new ArrayList()
        {
            1,
            "Bill",
            300,
            4.5f
        };

        var serializer = new JavaScriptSerializer();
        // 将ArrayList序列化为JSON字符串
        ArlistJson = serializer.Serialize(arlist1);
    }
}

前端代码修改

直接解析后端传递的JSON字符串为JS数组:

<body>
    <script>
        var jslist = [];
        function updateList() {
            // 解析JSON字符串为JS数组
            var arlist1 = JSON.parse('<%= ArlistJson %>');  
            jslist = arlist1;
            document.getElementById("demo").innerHTML = jslist;
        }
        window.onload = updateList;
    </script>

    <form id="form1" runat="server">
        <p id="demo"></p>
    </form>
</body>

解决方案二:直接注册JS变量(无需页面成员)

通过RegisterClientScriptBlock直接在页面输出定义JS数组的代码,无需暴露页面成员变量:

后端代码修改

public partial class JSPassData : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ArrayList arlist1 = new ArrayList()
        {
            1,
            "Bill",
            300,
            4.5f
        };

        var serializer = new JavaScriptSerializer();
        var json = serializer.Serialize(arlist1);

        // 直接注册一段JS代码,定义arlist1变量
        Page.ClientScript.RegisterClientScriptBlock(
            this.GetType(), 
            "ArlistData", 
            $"var arlist1 = {json};", 
            true
        );
    }
}

前端代码修改

直接使用后端注册好的arlist1变量:

<body>
    <script>
        var jslist = [];
        function updateList() {
            jslist = arlist1;
            document.getElementById("demo").innerHTML = jslist;
        }
        window.onload = updateList;
    </script>

    <form id="form1" runat="server">
        <p id="demo"></p>
    </form>
</body>

内容的提问来源于stack exchange,提问作者rorona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:25:20