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

VB.NET MVC控制器接收Ajax POST数组仅存首条数据的修复方案

问题:仅能记录数组中的第一条数据,如何修复控制器代码?

看起来你遇到了前端传数组但后端只保存第一条数据的问题,我来帮你分析原因并给出修复方案。

问题背景

你前端通过AJAX传递了包含两个数组的DataDiscount对象:

DataDiscount:{time:["5","8","9"], ind:["%10","%15","%20"]}

但目前后端控制器只能记录第一条数据(5和%10),下面是你的相关代码:

前端JavaScript代码

<script> 
$(document).on('click', '.Send', function () { 
    var a = []; 
    $(".k_sure").each(function () { 
        a.push($(this).val()); 
    }); 
    var b= []; 
    $(".k_sure").each(function () { 
        // 这里有个笔误!原代码写的是a.push,会导致ind数组和time数组内容重复
        b.push($(this).val()); 
    }); 
    var DataDiscount= { time: a, ind: b}; 
    $.ajax({ 
        type: "POST", 
        url: "/admin/pan/discount", 
        data: DataDiscount, 
        traditional: true, 
        dataType: 'html', 
        success: function (c) { }, 
        error: function () { } 
    }); 
}); 
</script>

先提个小问题:你前端代码里第二个each循环不小心把b.push()写成了a.push(),这会导致ind数组和time数组内容完全一样,建议先修正这个笔误,确保两组数据对应正确。

原控制器代码(VB.NET)

Function discount(time As String, ind As String) As String
    Dim x_add As New Discounts
    If x_add IsNot Nothing Then
        x_add.time = time
        x_add.ind = ind
        db.Discounts.Add(x_add)
        db.SaveChanges()
        Return "Success"
    Else
        Return "Err"
    End If
    Return ""
End Function

问题根源

你的控制器参数是单个字符串类型,但前端传递的是数组。ASP.NET MVC默认会把数组的第一个元素绑定到单个字符串参数上,所以只保存了第一条数据,后面的元素都被忽略了。

修复后的控制器代码

我们需要把参数改成数组类型,然后遍历数组批量添加数据:

Function discount(time As String(), ind As String()) As String
    ' 先校验数据合法性:数组非空且长度一致
    If time Is Nothing OrElse ind Is Nothing OrElse time.Length <> ind.Length Then
        Return "Err: 数据不匹配或为空"
    End If

    ' 遍历数组,为每一组数据创建Discounts实例
    For i As Integer = 0 To time.Length - 1
        Dim x_add As New Discounts()
        x_add.time = time(i)
        x_add.ind = ind(i)
        db.Discounts.Add(x_add)
    Next

    ' 统一保存所有数据,比循环内单独保存更高效
    db.SaveChanges()
    Return "Success"
End Function

关键修改点说明:

  1. 参数类型调整:把time和ind从String改为String()(字符串数组),这样就能接收前端传递的完整数组。
  2. 数据校验:添加了数组非空和长度一致的检查,避免出现索引越界或者数据不匹配的错误。
  3. 批量添加逻辑:通过循环遍历两个数组,为每一组对应的数据创建Discounts对象并添加到数据库上下文,最后一次性调用SaveChanges(),提升操作性能。
  4. 前端笔误修正:记得把前端代码里的a.push改成b.push,确保time和ind数组对应正确的业务数据。

这样修改后,就能把前端传递的所有数组元素都批量保存到数据库中了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:01:40