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

ASP.NET Core视图表格数据传控制器时获取空值问题

解决ASP.NET Core视图表格数据传递到控制器为空的问题

以下是针对你遇到的问题的具体修复步骤:

1. 控制器添加[FromBody]特性

ASP.NET Core默认不会从请求体自动绑定复杂类型参数,需要给Save方法的参数加上[FromBody]标记:

[HttpPost]
public JsonResult Save([FromBody] Generation generation)
{
    // 这里可以正常获取传递的generation数据
    return Json(new { success = true });
}

2. 修正JSON属性名大小写匹配问题

ASP.NET Core默认使用camelCase处理JSON属性名,而你的JS代码中使用的是PascalCase(Memberdetails),需要统一命名规范:

修改JS代码中的属性名为camelCase:

// 把原来的 generation.Memberdetails = membersDetails; 改成
generation.memberdetails = membersDetails;

或者如果你想保持PascalCase,可以在项目中配置JSON序列化规则(在Program.cs/Startup.cs):

builder.Services.AddControllersWithViews()
    .AddJsonOptions(options =>
    {
        // 允许忽略大小写匹配属性名
        options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
        // 禁用自动转camelCase,保持PascalCase
        options.JsonSerializerOptions.PropertyNamingPolicy = null;
    });

3. 修复数值类型转换问题

你的Memberdetails模型中TotalSum和MemberCount是int类型,但从表格TD中获取的是字符串,需要在JS中转为数字:

// 替换原来的取值代码
memberDetails.TotalSum = parseInt($(this).find("TD").eq(2).html());
memberDetails.MemberCount = parseInt($(this).find("TD").eq(3).html());

4. 优化数据读取方式(可选但推荐)

直接读取TD的HTML容易因为格式问题(比如空格、嵌套标签)导致取值错误,建议用data-*属性存储数据:

修改视图中的表格行:

@foreach (var item in Model.Memberdetails)
{
    <tr data-member-type="@item.MemberType"
        data-member-category="@item.MemberCategory"
        data-total-sum="@item.TotalSum"
        data-member-count="@item.MemberCount">
        <td>@item.MemberType</td>
        <td>@item.MemberCategory</td>
        <td>@item.TotalSum</td>
        <td>@item.MemberCount</td>
    </tr>
}

修改JS中的取值逻辑:

$("#tblDetails TBODY TR").each(function(){
    var memberDetails = {};
    memberDetails.MemberType = $(this).data("member-type");
    memberDetails.MemberCategory = $(this).data("member-category");
    memberDetails.TotalSum = parseInt($(this).data("total-sum"));
    memberDetails.MemberCount = parseInt($(this).data("member-count"));
    
    membersDetails.push(memberDetails);
});

5. 升级jQuery版本

你使用的jQuery 1.8.3过于老旧,可能存在兼容性问题,建议升级到较新的版本:

<script type="text/javascript" src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

完成以上修改后,点击Save按钮就能正确将表格数据传递到控制器的Save方法中了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:35:29