gpt4 book ai didi

c# - ASP.NET Html.ListBoxFor 在页面加载时始终选择所有选项

转载 作者:行者123 更新时间:2023-11-30 17:07:52 25 4
gpt4 key购买 nike

我正在构建一个非常简单的表单来编辑对象的属性。其中一个属性是与其关联的其他对象的列表,因此我使用的是双列表系统:左侧是当前关联对象的列表,右侧是可用对象的列表加上;下面的添加和删除按钮将相关操作应用于相关列表中突出显示的项目。很简单。

一切正常,除了一件事:当页面加载时,两个列表中的所有项目都被选中,即使我在创建用于填充的项目时专门设置了 Selected = false列出。这意味着如果用户在不接触列表的情况下提交表单,“当前”列表中的所有内容都会被删除,而“可用”列表中的所有内容都会被添加。由于它们是多选列表框,因此没有可供用户选择的虚拟选项,因此这个问题迫使他们始终至少删除一个当前项目并至少添加一个可用项目。即使有虚拟项目,它也会强制用户去选择它,如果他们忘记了,他们的列表就会变得一团糟。

[编辑添加:]

Controller 方法的一个例子:

[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);
}

...而 View 只有

@Html.ListBoxFor(m => m.ItemsToAdd, Model.AvailableItemSelectList)

@Html.ListBoxFor(m => m.ItemsToRemove, Model.AssociatedItemSelectList)

在相关的地方。当页面加载时,选择列表框中的每个选项都具有以下形式:

<option selected="selected" value="281">Example Item</option>

在创建列表和呈现页面之间如何选择项目?我该如何阻止它? 或者,如果失败了,我如何才能在页面加载时立即取消选择它们,以便用户看起来好像它们开始未被选中?我有一个修复程序可以使页面看起来像它应该的样子,但我想找到这个问题的根源。

最佳答案

这可能是一个迟到的回复,但我认为原因与列表框与其引用的对象的绑定(bind)有关。例如,如果您要使用 ListBox 而不是 ListBoxFor 并给 ListBox 一个名称以便它不绑定(bind)到任何东西,则最初不会选择列表框中的项目。但是如果你给它一个会导致它被绑定(bind)的名称,那么这些项目将被选中。我遇到了和你一样的麻烦,只是通过反复试验碰巧遇到了这个问题:-)

关于c# - ASP.NET Html.ListBoxFor 在页面加载时始终选择所有选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14233324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com