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

.NET Core 6表单提交SheetViewModel始终为null的问题求助

问题解决:.NET Core 6表单提交后SheetViewModel接收为null

问题描述

在.NET Core 6项目中,提交表单时控制器的sheetdatabase方法接收的SheetViewModel始终为null,即便表单所有值都已填写。当前视图使用Tuple<SheetViewModel, List<SheetViewModel>, List<SheetViewModel>>作为模型,表单绑定@Model.Item1的属性,页面能正常展示数据库数据,但提交后模型为空。

相关代码

  • 视图模型声明(.cshtml):
@model Tuple<CI_platform.Entities.ViewModels.SheetViewModel, List<CI_platform.Entities.ViewModels.SheetViewModel>, List<CI_platform.Entities.ViewModels.SheetViewModel>>
  • 表单代码(.cshtml):
<form method="post" asp-action="sheetdatabase" asp-controller="TimeSheet">...</form>
  • 控制器接收方法:
public IActionResult sheetdatabase(SheetViewModel model){...}
  • 视图GET方法:
public IActionResult volunteersheet(){...}
  • SheetViewModel类:
public class SheetViewModel{...}

问题原因

视图使用Tuple作为模型时,绑定@Model.Item1属性生成的HTML字段name会带有Item1.前缀(比如Item1.Username)。而控制器参数是SheetViewModel model,默认模型绑定器会寻找不带前缀的字段名(比如Username),两者不匹配导致无法正确绑定,最终model为null。

解决方案

方案1:给控制器参数添加绑定前缀标注

修改控制器方法,用[Bind(Prefix = "Item1")]告诉模型绑定器匹配带Item1.前缀的字段:

public IActionResult sheetdatabase([Bind(Prefix = "Item1")] SheetViewModel model)
{
    // 业务逻辑代码
}

方案2:手动修改表单字段的name属性

在表单绑定属性时,手动指定name属性去掉Item1.前缀。例如原本的:

<input asp-for="Item1.Username" />

改为:

<input asp-for="Item1.Username" name="Username" />

这样提交的字段名就和控制器参数的属性名匹配了。

方案3:创建复合视图模型(推荐)

Tuple可读性和扩展性差,建议创建专门的复合视图模型替代:

public class VolunteerSheetViewModel
{
    public SheetViewModel CurrentSheet { get; set; }
    public List<SheetViewModel> PastSheets { get; set; }
    public List<SheetViewModel> ApprovedSheets { get; set; }
}

修改视图模型声明:

@model CI_platform.Entities.ViewModels.VolunteerSheetViewModel

表单绑定改为@Model.CurrentSheet的属性:

<input asp-for="CurrentSheet.Username" />

控制器接收方法可选择直接接收复合模型:

public IActionResult sheetdatabase(VolunteerSheetViewModel model)
{
    var sheetModel = model.CurrentSheet;
    // 业务逻辑代码
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:12:17