2016-04-15 35 views
2

我在使用ViewModel时将值返回给控制器时出现问题。MVC ViewModel返回ArgumentNullException

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

加载页面时,隐藏字段中的值与预期值相同。但是,当提交表单时,字段中的值不会被发送,而是我得到一个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) 
{ 
} 
+4

您并未将SCView发布到服务器。你发布一个整数。 – mason

+0

@mason谢谢,但我不明白。这个人[链接](http://stackoverflow.com/questions/27191691/viewmodel-returns-null-on-postback-mvc-5)能够使用相同的格式更新属性没有错误。 – Xtravia9

+0

尝试在视图中添加日期输入并将您的操作方法更改为接受“FixView”而不是“SCView”。 – mason

回答

2

,你必须要禾代码rking如MVC应该能够映射您FV.ID财产如预期的HiddenFor()助手将产生适当的名称来处理它映射:

enter image description here

使用您提供的相同的代码,调试器显示出后下提交表单:

enter image description here

这里的问题听起来像你有一些其他的特性,可能是基于集合的那些使用DropDownListFor()佣工有收藏WHI ch不会发布到服务器,所以当您尝试使用该模型时,必须渲染其中一个助手,您将获得ArgumentNullException

+0

谢谢。我使用[DisplayName(“”)]在FixView中有另一个属性。我不知道为什么这会导致问题。 – Xtravia9