-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>
}
感謝您的幫助提前。
顯示你的代碼。我們無法猜測你做錯了什麼。 –
哪個集合屬性不具有約束力?如果您指的是「AllIssuesExceptOriginal」,那麼您的代碼很可能會生成非連續的索引器,因此綁定將失敗,除非您包含索引器的輸入 –
啊,謝謝......我沒有想到這一點。 –