マネージャーのリストを表示するビューを作成しています。マネージャの名前の横にはチェックボックスがあり、マネージャ リストから削除するように選択できます。フォーム送信をビュー モデルにバインドする際に問題が発生しています。ページは次のようになります。
ページの ViewModel は次のとおりです。
public class AddListManagersViewModel
{
public List<DeleteableManagerViewModel> CurrentManagers;
}
各 DeleteableManagers のサブ ViewModel は次のとおりです。
public class DeleteableManagerViewModel
{
public string ExtId { get; set; }
public string DisplayName { get; set; }
public bool ToBeDeleted { get; set; }
}
これはメイン ビューのコードです。
@model MyApp.UI.ViewModels.Admin.AddListManagersViewModel
<div class="row">
<div class="span7">
@using (Html.BeginForm("RemoveManagers","Admin"))
{
@Html.AntiForgeryToken()
<fieldset>
<legend>System Managers</legend>
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Remove</th>
</tr>
</thead>
<tbody>
@Html.EditorFor(model => model.CurrentManagers)
</tbody>
</table>
</fieldset>
<div class="form-actions">
<button type="submit" class="btn btn-primary">Delete Selected</button>
</div>
}
</div>
</div>
これは、DeleteableManagerViewModel 用に作成した EditorTemplate です。
@model MyApp.UI.ViewModels.Admin.DeleteableManagerViewModel
<tr>
<td>@Html.DisplayFor(model => model.DisplayName)</td>
<td>
@Html.CheckBoxFor(model => model.ToBeDeleted)
@Html.HiddenFor(model => model.ExtId)
</td>
</tr>
しかし、フォームをコントローラーに送信すると、モデルは null に戻ります! これが私がやりたいことです:
[HttpPost]
public virtual RedirectToRouteResult RemoveManagers(AddListManagersViewModel model)
{
foreach (var man in model.CurrentManagers)
{
if (man.ToBeDeleted)
{
db.Delete(man.ExtId);
}
}
return RedirectToAction("AddListManagers");
}
この投稿に沿って試してみました: CheckBoxList 複数の選択: モデル バインド バックの難しさですが、何かが欠けているに違いありません....
ご協力いただきありがとうございます!