【发布时间】:2013-01-09 10:36:47
【问题描述】:
我正在构建一个非常简单的表单来编辑对象的属性。其中一个属性是与之关联的其他对象的列表,因此我使用的是两个列表系统:左侧是当前关联对象的列表,右侧是可用对象的列表加上;下面的添加和删除按钮将相关操作应用于相关列表中突出显示的项目。很简单。
一切正常,除了一件事:当页面加载时,两个列表中的所有项目都被选中,即使我在创建用于填充列表的项目时专门设置了Selected = false。这意味着如果用户提交表单时没有触及列表,“当前”列表中的所有内容都会被删除,而“可用”列表中的所有内容都会被添加。由于它们是多选列表框,因此没有可供用户选择的虚拟选项,因此这个问题迫使他们始终删除至少一个当前项目并添加至少一个可用项目。即使有一个虚拟项目,它也会强制用户去选择它,如果他们忘记了,他们的列表就会混乱。
[编辑添加:]
控制器方法的作用示例:
[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>
在创建列表和呈现页面之间如何选择项目?我该如何阻止它? 或者,如果做不到这一点,我如何在页面加载时立即取消选择它们,以便用户看起来好像他们开始未选择? 我有一个修复程序可以使页面看起来像它应该的那样,但我想找到这个问题的根源。
【问题讨论】:
-
你能发一个截图或一些代码吗?
-
我不能随意分享确切的代码,因为它是公司产品,但我会整理一个经过消毒的示例。
标签: c# asp.net asp.net-mvc razor asp.net-mvc-4