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
相关产品推荐
相关产品推荐

