ASP.NET Core MVC提交大量数据时View向Controller传null值问题
解决思路
1. 调整模型绑定集合大小限制
ASP.NET Core 默认对模型绑定的集合项数有配置限制,你的问题刚好在64条触发,大概率是MaxModelBindingCollectionSize的阈值设置导致。在Program.cs中修改配置:
builder.Services.AddControllersWithViews(options => { // 设置为你需要的最大条目数,比如200 options.MaxModelBindingCollectionSize = 200; });
同时要检查表单值总数的限制,每个列表项如果包含多个属性,64条的总键值对可能超过默认的ValueCountLimit(默认1024),一并调整:
builder.Services.Configure<FormOptions>(options => { // 根据你的单条数据字段数计算,比如每条10个字段,200条就是2000 options.ValueCountLimit = 2000; });
2. 确认表单元素命名格式
确保for循环渲染的表单元素name属性严格遵循ASP.NET Core模型绑定要求,比如:
@for (int i = 0; i < Model.Items.Count; i++) { <input type="text" name="Items[@i].Name" value="@Model.Items[i].Name" /> <input type="number" name="Items[@i].Quantity" value="@Model.Items[i].Quantity" /> }
必须使用连续的索引(从0开始无间隔),否则模型绑定器可能无法正确识别集合,当条目数超过一定值时会直接返回null。
3. 检查请求大小限制
如果提交的内容包含文件或大文本,可能触发请求长度限制,导致请求被截断。调整表单多部分内容长度限制:
builder.Services.Configure<FormOptions>(options => { // 设置为合适的大小,比如10MB options.MultipartBodyLengthLimit = 10 * 1024 * 1024; });
也可以在接收请求的控制器方法上添加特性:
[RequestSizeLimit(10 * 1024 * 1024)] public IActionResult Submit(YourModel model) { // ... }
4. 启用模型绑定日志排查
如果以上方法都无效,开启模型绑定的调试日志,查看具体失败原因。在appsettings.json中添加:
{ "Logging": { "LogLevel": { "Microsoft.AspNetCore.Mvc.ModelBinding": "Debug" } } }
运行程序后查看日志,会输出模型绑定过程中的详细错误信息,比如哪个字段绑定失败、是否触发了限制规则等。
内容的提问来源于stack exchange,提问作者Diego
相关产品推荐
相关产品推荐

