私が遭遇した問題は、AssignedUsers プロパティが (GET Edit を終了する前に) コンストラクターで初期化されているにもかかわらず、フォームを送信した後、POST Edit アクションで null として返されることです。他のすべてのプロパティは、その状態を保持します。
ModelState.IsValid チェックの後 (およびビューを返す前) にプロパティを再初期化する以外に、これを乗り越える他の方法はありますか?
モデル:
public class GroupModel {
public List<int> AssignedUserIds { get; set; }
public MultiSelectList AssignedUsers { get; set; }
public GroupModel(Groups group) {
var allUserGroups = AccountManagementAdapter.GetUserGroups();
AssignedUsers = new MultiSelectList(
allUserGroups
.Where(userGroup => userGroup.GroupId == Id)
.Select(userGroup => userGroup.Users)
.ToList(),
"Id",
"Username");
AssignedUserIds = allUserGroups
.Where(userGroup => userGroup.GroupId == Id)
.Select(userGroup => userGroup.UserId)
.ToList();
}
意見:
@using (Html.BeginForm()) {
@Html.ListBoxFor(group => group.AssignedUserIds, Model.AssignedUsers)
<input type="submit" value="Save"/>
}
コントローラ:
[HttpGet]
public ActionResult Edit(int id) {
GroupModel groupModel = new GroupModel(AccountManagementAdapter.GetGroups().FirstOrDefault(group => group.Id == id));
return View(groupModel);
}
[HttpPost]
public ActionResult Edit(GroupModel group) {
if (ModelState.IsValid) {
group = new GroupModel(AccountManagementAdapter.UpdateUsersForGroup(group.Id, group.AssignedUserIds));
ViewBag.Success = true;
}
return View(group);
}