2016-04-21 70 views
-1

問題是,我的ViewModel有例如12項。在Chrome瀏覽器中,我可以看到(網絡 - >點擊回發請求 - >標題 - >表單數據),所有12個項目都有修改後的值,我想要保存在控制器中。但是在控制器中只有9個物品到達。其他三個在哪裏?模型的容量是16,但其他9到15的項目設置爲空。ViewModel的某些項在View和控制器之間丟失

如何在回發期間查看視圖和控制器之間會發生什麼?

更新

好了,現在我發現的ModelState中犯規包含的所有項目,但這些信息將被轉移到請求控制器 - > Form容器。讓我們看看,如何丟失的物品也將被轉移到ModelState中......

視圖模型

public class ViewModel 
{ 

    public List<tool.Models.Issue> OpenIssue { get; set; } 
    public List<tool.Models.Issue> AllIssuesExceptOriginal { get; set; } 
    public List<tool.Models.Issue> ClosedIssue { get; set; } 
    public tool.Models.Site Site { get; set; } 
    public int ID { get; set; } 
} 

控制器

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Edit(ViewModels.ViewModel ViewModel) 
    { 
    //Do something with the content of the ViewModel 
    } 

查看(複雜得多)

@for (int i = 0; i < Model.OpenIssue.Count(); i++) 
{ 

@Html.HiddenFor(modelItem => modelItem.OpenIssue[i].Id); 
//a lot more HiddenFor fields 


Model.AllIssuesExceptOriginal.Capacity = Model.AllIssuesExceptOriginal.Count; 
var History = Model.OpenIssue[i].Histories.Where(p => p.IssueId == Model.OpenIssue[i].Id).OrderByDescending(a => a.LastUpdate).First(); 

<tr class="Content_table">   
<td class="Content_Column"> 
     <div class="Content_all"> 
     <div class="History">@Html.DisplayFor(modelItem => History.Description)</div> 


      @if(Model.AllIssuesExceptOriginal.Where(p => p.InternalNotes.Replace("Updated:", "") == Model.OpenIssue[i].Id.ToString()).Count() != null) 
      { 

       for (int a = 0; a < Model.AllIssuesExceptOriginal.Where(p => p.InternalNotes.Replace("Updated:", "") == Model.OpenIssue[i].Id.ToString()).Except(Model.AllIssuesExceptOriginal.Where(l=>l.LastUpdate == DateTime.MinValue)).Count(); a++) 
       { 
       var OtherIssues = Model.AllIssuesExceptOriginal.Where(p => p.InternalNotes.Replace("Updated:", "") == Model.OpenIssue[i].Id.ToString()).Except(Model.AllIssuesExceptOriginal.Where(l=>l.LastUpdate == DateTime.MinValue)).OrderBy(p => p.LastUpdate).ToList(); 

        if(OtherIssues[a].Description != "noUpdate") 
        { 
        <div class="updated" style="position:relative" id="@i:@a:Description"> 
        <b>@Html.DisplayFor(modelitem=> OtherIssues[a].User.FirstName) @Html.DisplayFor(modelitem=> OtherIssues[a].User.LastName)</b> <span style="color:grey;">[email protected](modelitem=> OtherIssues[a].LastUpdate, "{0:dd.MM.yy HH:mm}") </span> <br /> 
        @Html.DisplayFor(modelItem => OtherIssues[a].Description, new { @class = "meeting" }) 

        <span style="float:right; "><img src="~/Images/ic_cancel_black_18dp.png" id="Description:@i:@a:@Model.AllIssuesExceptOriginal.FindIndex(p=>p.Id == OtherIssues[a].Id)" onclick="markActiveLinkDelete(this);"> 
        @Html.HiddenFor(modelItem => modelItem.AllIssuesExceptOriginal[Model.AllIssuesExceptOriginal.FindIndex(p=>p.Id == OtherIssues[a].Id)].Description) 
        </span> 

        </div> 
        } 

       } 
      } 

     <div class="updated" >@Html.TextAreaFor(modelItem => modelItem.AllIssuesExceptOriginal[Model.AllIssuesExceptOriginal.FindLastIndex(p=>p.InternalNotes.Replace("Updated:","") == Model.OpenIssue[i].Id.ToString())].Description, new { @class = "meeting" })</div> 
     @Html.HiddenFor(modelItem=>modelItem.AllIssuesExceptOriginal[Model.AllIssuesExceptOriginal.FindLastIndex(p=>p.InternalNotes.Replace("Updated:","") == Model.OpenIssue[i].Id.ToString())].InternalNotes) 
     </div> 


</td> 

} 

</table> 
</div> 
    <p> 
     <input type="submit" value="Save" name = "Save"/> 
     <input type="submit" value="Cancel" name = "Cancel"/>    
    </p> 
</fieldset> 
} 

感謝您的幫助提前。

+0

顯示你的代碼。我們無法猜測你做錯了什麼。 –

+1

哪個集合屬性不具有約束力?如果您指的是「AllIssuesExceptOriginal」,那麼您的代碼很可能會生成非連續的索引器,因此綁定將失敗,除非您包含索引器的輸入 –

+0

啊,謝謝......我沒有想到這一點。 –

回答

0

爲了解決這個問題,我爲模型的每個項目添加了索引器的隱藏字段。

查看更新