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

