gpt4 book ai didi

c# - MVC 5下拉列表用于编辑 View 中的多选值绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 00:03:33 25 4
gpt4 key购买 nike

我在编辑 View 中有一个 select2 多选下拉菜单。当我尝试将选定的值绑定(bind)到下拉列表时,它无法绑定(bind)。任何帮助表示赞赏。请从 *.cshtml 和 *.cs 文件中找到以下代码片段。

@Html.DropDownListFor(model => model.Items, new MultiSelectList(ViewBag.ItemsBag, "Value", "Text", Model.ItemsSelected.Select(x => x.Value)), new { @class = "form-control features-segments select2-multiselect-checkbox", multiple = "multiple" })

ViewBag.ItemsBag = db.Items.Select(v => new SelectListItem
{
Text = v.ItemName,
Value = v.ItemId.ToString()
});

ModelVM modelVM = new ModelVM()
{
ItemsSelected = SelectedItems.Items.Select(x => new SelectListItem() { Text = x.ItemName, Value = x.ItemId.ToString() })
};

Items 模型具有以下项目。属性 ItemsSelected 不为空,其中包含 3 个值,并且 ViewBag.ItemsBag 也不为空,并且包含数据库中的所有项目。这两个属性都是具有 Text 和 Value 属性的 SelectListItem 类型。

public int FeatureId { get; set; }
public string FeatureName { get; set; }
public string ReferenceName { get; set; }
public FeatureSection SectionName { get; set; }//Enum
public FeatureType Type { get; set; }//Enum
public bool DefaultBoolValue { get; set; }
public string DefaultTextValue { get; set; }
public IEnumerable<SelectListItem> ItemsSelected { get; set; }
public virtual ICollection<Item> Items { get; set; } = new List<Item>();

最佳答案

由于您在 ViewBag 中提供了项目值像这样的定义,清楚地表明了字符串值:

ViewBag.ItemsBag = db.Items.Select(v => new SelectListItem
{
Text = v.ItemName,
Value = v.ItemId.ToString() // implies all values are strings
});

然后是与 DropDownListFor 绑定(bind)的属性/ListBox必须有 List<string>string[]要正确绑定(bind)的类型。使用 ICollection<Item>不会绑定(bind),因为它是一个复杂的对象,而 helper 需要值类型(数字类型/字符串)才能绑定(bind)。

因此,您必须创建一个类型为 List<string> 的属性。第一:

public List<string> SelectedValues { get; set; }

然后使用 ListBoxFor使用该属性的助手:

@Html.ListBoxFor(model => model.SelectedValues, new MultiSelectList(ViewBag.ItemsBag, "Value", "Text", Model.ItemsSelected.Select(x => x.Value)), new { @class = "form-control features-segments select2-multiselect-checkbox", multiple = "multiple" })

注意:

如果 ItemId特性有 int类型(并且所有值都可以转换为 int ),尝试使用 List<int>/int[]键入而不是 List<string>/string[] :

public List<int> SelectedValues { get; set; }

关于c# - MVC 5下拉列表用于编辑 View 中的多选值绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54070688/

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