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

如何在C#中将客户端数组传递至服务端(含AJAX实现疑问)

解决AJAX传递数组到ASP.NET服务端接收失败的问题

我来帮你梳理下当前代码存在的问题,然后给出两种可行的修正方案,让你能顺利把数组传递到服务端处理。

先分析现有代码的问题

  1. AJAX的URL未指定:你的$.ajax里url是空的,必须指定服务端处理请求的路径(比如当前页面、WebMethod接口);
  2. JSON contentType下的数组传递方式错误:当设置contentType: "application/json"时,需要把数据序列化成JSON字符串,而不是直接传数组对象;
  3. 服务端接收方式不匹配:用Request["ddlArray[]"]无法正确获取JSON格式传递的数组,需要调整接收逻辑或者修改AJAX的编码方式。

方案一:使用表单默认编码传递数组(简单直接)

这种方式不需要处理JSON序列化,适合快速调整现有代码:

前端AJAX修改:

function addValues() {
    debugger;
    var arrddlValue = [];
    var hdnddlValue = document.getElementById("hdnDDL").value;
    var strddlValue = hdnddlValue.split(',');
    for (var i = 0; i < strddlValue.length; i++) {
        var ddlValue = document.getElementById(strddlValue[i]).value;
        arrddlValue.push(ddlValue);
    }

    $.ajax({
        url: window.location.pathname, // 指向当前页面
        type: "POST", // 必须指定POST方法
        data: { ddlArray: arrddlValue }, // 直接传数组,jQuery会自动处理为表单格式
        dataType: "json",
        // 移除contentType,使用默认的application/x-www-form-urlencoded
        async: false, // 建议尽量改成true,同步请求会阻塞浏览器
        success: function (data) {
            console.log("数组传递成功");
        },
        error: function (x, e) {
            console.log("请求错误:" + e.message);
        }
    });
}

服务端接收代码修改:

使用Request.Form.GetValues()来获取数组参数:

protected void btnSort_Click(object sender, EventArgs e)
{
    try
    {
        // 表单编码下,数组参数会被命名为ddlArray[]
        string[] arrValues = Request.Form.GetValues("ddlArray[]");
        if (arrValues != null && arrValues.Length > 0)
        {
            // 在这里处理你的数组逻辑
            foreach (var value in arrValues)
            {
                // 示例操作:输出值
                Response.Write($"接收的值:{value}<br/>");
            }
        }
    }
    catch (Exception ex)
    {
        // 异常处理
        Response.Write("错误:" + ex.Message);
    }
}

方案二:使用JSON格式传递数组(更规范的前后端交互)

如果想保持JSON contentType,需要把数组序列化成JSON字符串,服务端用WebMethod接收:

前端AJAX修改:

function addValues() {
    debugger;
    var arrddlValue = [];
    var hdnddlValue = document.getElementById("hdnDDL").value;
    var strddlValue = hdnddlValue.split(',');
    for (var i = 0; i < strddlValue.length; i++) {
        var ddlValue = document.getElementById(strddlValue[i]).value;
        arrddlValue.push(ddlValue);
    }

    $.ajax({
        url: "你的页面.aspx/ProcessDDLArray", // 指向WebMethod
        type: "POST",
        data: JSON.stringify({ ddlArray: arrddlValue }), // 序列化为JSON字符串
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: true,
        success: function (data) {
            console.log("处理结果:" + data.d);
        },
        error: function (x, e) {
            console.log("请求错误:" + e.message);
        }
    });
}

服务端WebMethod代码:

需要定义静态的WebMethod来接收JSON参数,ASP.NET会自动反序列化:

[System.Web.Services.WebMethod]
public static string ProcessDDLArray(string[] ddlArray)
{
    if (ddlArray != null && ddlArray.Length > 0)
    {
        // 处理数组逻辑
        string result = "成功接收数组,共" + ddlArray.Length + "个元素:" + string.Join(",", ddlArray);
        return result;
    }
    return "未接收到有效数组";
}

额外注意事项

  • 确保页面已经正确引入jQuery库,否则$.ajax无法生效;
  • 尽量避免使用async: false,同步AJAX会阻塞浏览器主线程,影响用户体验;
  • 如果使用WebMethod,方法必须是静态方法,并且加上[WebMethod]属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:29:23