オブジェクトのプロパティを編集するための非常に単純なフォームを作成しています。プロパティの 1 つはそれに関連付けられている他のオブジェクトのリストであるため、2 つのリスト システムを使用しています。左側には現在関連付けられているオブジェクトのリスト、右側には使用可能なオブジェクトのリストがあります。たす; その下にある [追加] ボタンと [削除] ボタンは、関連する操作を関連するリスト内の強調表示された項目に適用します。十分に単純です。
1 つのことを除いて、すべて正常に動作してSelected = false
います。リストに入力する項目を作成するときに具体的に設定した場合でも、ページが読み込まれると、両方のリストのすべての項目が選択されます。これは、ユーザーがリストに触れずにフォームを送信すると、「現在の」リストのすべてが削除され、「利用可能な」リストのすべてが追加されることを意味します。それらは複数選択リストボックスであるため、ユーザーが選択できるダミーのオプションがないため、この問題により、常に現在のアイテムの少なくとも 1 つを削除し、使用可能なアイテムの少なくとも 1 つを追加する必要があります。ダミーのアイテムがあったとしても、ユーザーはそれを選択する必要があり、忘れるとリストがめちゃくちゃになります。
[追加するために編集:]
コントローラ メソッドの実行例:
[HttpGet]
public ActionResult EditForm(int objectId)
{
MyObject objectToEdit = _objectStore.GetObject(objectId);
ObjectEditViewModel viewModel = new ObjectEditViewModel();
viewModel.Object = objectToEdit;
viewModel.AssociatedItemSelectList = objectToEdit.AssociatedItems.Select(o => new SelectListItem { Text = o.Name, Value = o.Id, Selected = false });
viewModel.AvailableItemSelectList = _itemStore.GetAllItems().Where(o => !objectToEdit.AssociatedItems.Contains(o))
.Select(o => new SelectListItem { Text = o.Name, Value = o.Id, Selected = false });
return View(viewModel);
}
...そしてビューはただ持っています
@Html.ListBoxFor(m => m.ItemsToAdd, Model.AvailableItemSelectList)
と
@Html.ListBoxFor(m => m.ItemsToRemove, Model.AssociatedItemSelectList)
関連する場所で。ページが読み込まれると、選択リストボックスのすべてのオプションは次の形式になります。
<option selected="selected" value="281">Example Item</option>
リストの作成とページのレンダリングの間でアイテムがどのように選択されているか? どうすれば止められますか?または、それに失敗した場合、ページの読み込み時にすぐに選択を解除して、ユーザーが選択されていないように見えるようにするにはどうすればよいですか? ページを本来あるべきように見せるための修正がありますが、この問題の根本を突き止めたいと思います。