2016-04-15 78 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