私のViewModelは次のとおりです。
public class ObjectiveVM
{
public string DateSelected { get; set; }
public List<string> DatePeriod { get; set; }
public IList<ObList> obList { get; set; }
public class ObList
{
public int ObjectiveId { get; set; }
public int AnalystId { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string AnalystName { get; set; }
public bool Include { get; set; }
}
}
これはビューに渡され、期待どおりに入力され、ビューに正しく表示されます。
私の問題は、コントローラーにポストバックされるときです。それを受け入れるための私のコントローラーコードは次のとおりです。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Analyst(ObjectiveVM ovm)
ovm.obList
は常に null として表示されます:
私のビューhtmlは次のとおりです。
@model Objectives.ViewModels.ObjectiveVM
@{
ViewBag.Title = "Analyst";
}
<h2>Copy Objectives for Analyst</h2>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Objective</legend>
@Html.DropDownListFor(model => model.DateSelected, new SelectList(Model.DatePeriod))
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.obList[0].Include)
</th>
<th>
@Html.DisplayNameFor(model => model.obList[0].AnalystName)
</th>
<th>
@Html.DisplayNameFor(model => model.obList[0].Title)
</th>
<th>
@Html.DisplayNameFor(model => model.obList[0].Description)
</th>
</tr>
@foreach (var obList in Model.obList)
{
<tr>
<td>
@Html.HiddenFor(modelItem => obList.ObjectiveId)
@Html.HiddenFor(modelItem => obList.AnalystId)
@Html.HiddenFor(modelItem => obList.Title)
@Html.HiddenFor(modelItem => obList.Description)
@Html.CheckBoxFor(modelItem => obList.Include)
</td>
<td>
@Html.DisplayFor(modelItem => obList.AnalystName)
</td>
<td>
@Html.DisplayFor(modelItem => obList.Title)
</td>
<td>
@Html.DisplayFor(modelItem => obList.Description)
</td>
</tr>
}
</table>
<p>
<input type="submit" value="Copy Selected Objectives" />
</p>
</fieldset>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
投稿されたフォームの値で開発者ツールを見ると、問題ないように見えます。
投稿されたフォームの値がコントローラーの HTTP 投稿でビューモデルにマッピングされていない理由を誰でも見ることができますか?
ありがとう、マーク