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

ASP.NET Core 6 Model绑定int类型属性失败返回默认值0

.NET 6 Umbraco 迁移整数类型模型绑定失效修复方案

问题根因

你遇到的所有整数属性绑定后默认返回0、加[FromBody]返回415错误的问题,是两个问题叠加导致的:

  • 按钮未阻止表单默认提交行为,实际同时发起了两个请求:你写的jQuery Ajax请求,以及表单原生的multipart/form-data格式提交请求,后者才是服务端实际接收到、执行模型绑定的请求,这也是你明明在Ajax里配置了contentType: "application/json",服务端依然识别为表单格式请求的核心原因。
  • .NET 6 的模型绑定规则比.NET Framework 4.8严格:.NET Framework MVC的模型绑定自带宽松的命名适配(自动适配驼峰/帕斯卡命名差异)和类型转换容错,哪怕前端传的整数字段是字符串格式、字段名大小写不匹配也能自动转换绑定;.NET 6 默认模型绑定对命名匹配、类型匹配要求更严格,类型不匹配时值类型会直接赋值默认值0,因此不存在类型转换问题的字符串属性可以正常绑定,整数属性全部绑定失败。

分步修复操作

1. 解决表单重复提交问题

你的提交按钮放在form标签内,默认type为submit,点击后会优先触发表单原生提交,先从这两点修复:

  • 给按钮显式添加type="button"属性,阻断默认提交触发逻辑:
<button type="button" class="btn btn-outline-primary btn-round mt-4" onclick="submitComment('CommentForm')">Post comment</button>
  • 在提交方法开头添加默认行为阻止逻辑,双重保险避免原生表单提交:
function submitComment(formId) {
    event.preventDefault();
    // 保留你原有的表单值读取、commentObj构造逻辑
}

修复后打开浏览器开发者工具网络面板确认:点击提交按钮后仅发起1个请求,不会出现重复请求。

2. 修正接口绑定配置

因为前端发送的是JSON格式请求体,必须给Action参数添加[FromBody]特性,之前返回415是因为接口收到的是原生表单提交的请求,和Ajax配置无关:

[HttpPost]
public async Task<IActionResult> HandleSubmit([FromBody]CommentPostModel model)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }
    // 保留原有评论入库等业务逻辑
}

3. 修正前端传参的类型和字段名匹配

  • 构造请求参数commentObj时,所有整数类型字段必须显式转为Number类型,不要直接传入DOM读取的字符串值:
const commentObj = {
    AuthorName: $("#AuthorName").val().trim(),
    AuthorEmail: $("#AuthorEmail").val().trim(),
    Message: $("#Message").val().trim(),
    AuthorUrl: $("#AuthorUrl").val().trim(),
    BlogPostId: parseInt($("#BlogPostId").val()),
    ParentId: parseInt($("#ParentId").val()),
    Level: parseInt($("#Level").val())
}
  • .NET 6 默认System.Text.Json序列化规则是小驼峰匹配,如果你的commentObj字段名和C#模型属性名仅大小写差异(比如前端传blogPostId对应后端BlogPostId),不需要额外加[JsonPropertyName]特性;如果字段名完全不一致,再通过特性显式映射即可。

可选兼容方案(无需修改为JSON提交)

如果你不想调整为JSON提交模式,可以去掉Ajax配置里的contentType: "application/json"和JSON.stringify(commentObj)逻辑,直接传入序列化后的表单键值对,同时保证前端表单元素的name属性和C#模型的属性名大小写完全一致,去掉接口参数上的[FromBody]特性,走默认表单绑定流程即可。

验证标准:修复后查看请求载荷,整数字段是数字类型而非带引号的字符串类型,请求Content-Type为application/json,此时服务端即可正常绑定所有整数属性值。

内容的提问来源于stack exchange,提问作者John J Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:30:36