MVC 视图模型 returns ArgumentNullException

MVC ViewModel returns ArgumentNullException

我在使用 ViewModel 时向控制器返回值时遇到问题。

为清楚起见,我简化了下面的代码,其中原始代码包含更多字段。

加载页面时,隐藏字段中的值符合预期。但是,当提交表单时,字段中的值没有被发送,而是我得到一个 ArgumentNullException。

请你指出我做错了什么。

查看

@model Project.Models.SCView
@using (Html.BeginForm("ScorecardEdit"))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

    @Html.HiddenFor(model => model.FV.ID)


    <input type="submit" value="Save" />

}

型号

public class FixView
{
    public int ID { get; set; }

    [DisplayFormat(DataFormatString = "{0:ddd dd/MM/yyyy}")]
    public DateTime MatchDate { get; set; }

}

public class SCView
{
    public FixView FV { get; set; }

    public SCView()
    {
        this.FV = new FixView();
    }
}

控制器

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ScorecardEdit(SCView ReturnSC)
{
}

您拥有的代码应该可以正常工作,因为 MVC 应该能够按预期映射您的 FV.ID 属性,因为 HiddenFor() 助手将生成正确的名称来处理它的映射:

使用您提供的相同代码,调试器在提交表单后演示了以下内容:

这里的问题听起来您还有一些其他属性,可能 collection-based 使用 DropDownListFor() 助手的属性,这些助手具有未发布到服务器的集合,因此当您尝试使用您必须渲染的模型填充其中一个助手,您将获得 ArgumentNullException.