gpt4 book ai didi

c# - ListBoxFor 不让我选择多个项目 MVC

转载 作者:太空宇宙 更新时间:2023-11-04 16:06:27 25 4
gpt4 key购买 nike

当我运行代码时,我一次只能选择一个项目,这很奇怪,因为“ListBoxFor()”用于选择多个项目,所以我想要的是:

选择多个项目

View (索引.cshtml):

<div>
@Html.ListBoxFor(m => m.DropDownItems, new MultiSelectList(Repository.DDFetchItems(), "Value", "Text", Model.DropDownItems))
</div>

模型(ModelVariables.cs):

public class ModelVariables
{
public List<SelectListItem> DropDownItems { get; set; }
}

public static class Repository
{
public static List<SelectListItem> DDFetchItems()
{
return new List<SelectListItem>()
{
new SelectListItem(){ Text = "Dogs", Value = "1", Selected = true},
new SelectListItem(){ Text = "Cats", Value = "2"},
new SelectListItem(){ Text = "Death", Value = "3"}
};
}
}

Controller (HomeController.cs):

[HttpGet]
public ActionResult Index()
{
ModelVariables model = new ModelVariables()
{
DropDownItems = Repository.DDFetchItems()
};
return View(model);
}

最佳答案

您不能绑定(bind) <select multiple>到复杂对象的集合(这就是 List<SelectListItem> 是什么)。 <select multiple>回发一组简单值(在您的情况下,如果您选择第一个和第三个选项,它将提交 [1, 3](所选选项的值)。

您的模型需要 IEnumerable<int>要绑定(bind)到的属性。

public class ModelVariables
{
public IEnumerable<int> SelectedItems { get; set; }
public IEnumerable<SelectListItem> DropDownItems { get; set; }
}

然后在GET方法中

public ActionResult Index()
{
var ModelVariables= new ModelVariables()
{
DropDownItems = Repository.DDFetchItems(),
SelectedItems = new List<int>(){ 1, 3 } // to preselect the 1st and 3rd options
};
return View(model);
}

在 View 中

@Html.ListBoxFor(m => m.SelectedItems, Model.DropDownItems)

边注

  1. 删除 Selected = trueDDFetchItems()方法 - 它的被 ListBoxFor() 忽略方法,因为它的值您绑定(bind)的属性决定了选择的内容
  2. 不需要建立一个新的相同的SelectList来自ListBoxFor() 里面的第一个方法(属性DropDownItems已经是IEumerable<SelectListItem> )

关于c# - ListBoxFor 不让我选择多个项目 MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37848223/

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