C# ListBoxFor不允许我选择多个项目MVC

C# ListBoxFor不允许我选择多个项目MVC,c#,html,asp.net-mvc,C#,Html,Asp.net Mvc,当我运行代码时,一次只能选择一个项目,这很奇怪,因为“ListBoxFor()”用于选择多个项目,所以我想要的是: 选择多个项目 视图(Index.cshtml): 不能将绑定到复杂对象的集合(这就是列表的含义)。发回一个简单值数组(在您的情况下,如果选择第一个和第三个选项,它将提交[1,3](所选选项的值) 您的模型需要绑定到IEnumerable属性 public class ModelVariables { public IEnumerable<int> Selecte

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

选择多个项目

视图(Index.cshtml):

不能将
绑定到复杂对象的集合(这就是
列表
的含义)。
发回一个简单值数组(在您的情况下,如果选择第一个和第三个选项,它将提交
[1,3]
(所选选项的值)

您的模型需要绑定到
IEnumerable
属性

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

  • DDFetchItems()
    方法-its中删除
    Selected=true
    ListBoxFor()
    方法忽略,因为它是 属性,您的绑定将决定所选内容
  • 无需从中构建新的相同的
    选择列表
    ListBoxFor()
    方法(属性
    DropDownItems
    已经是可数的

  • 很好,我让它工作了,但是,我无法预选项目,因为我无法从'int'转换为,SelectedItems=new List(){1,3},它想要代替'int',因为我更改了public IEnumerable SelectedItems{get;set;}您无法将其更改为
    IEnumerable SelectedItems
    -这永远不会像我解释的那样工作(您无法将
    绑定到复杂对象的集合,如果您这样做,您的应用程序将失败)。它必须是
    IEnumerable SelectedItems
    Ok。我还原了它,现在我在变量selectedmdItems=model.SelectedItems.Where(x=>x.Selected.Select)(x=>x.Text.ToList()中得到一个错误。);“int”不包含“Selected”的定义,并且没有扩展方法“Selected”接受类型为“int”no的第一个参数。您不理解。
    将发回一个
    int
    数组-因此,如果您选择第二个和第三个选项,那么在ost方法中,
    model.SelectedItems
    将是
    [2,3]
    。您不需要任何
    Linq
    来获取所选值-您只需使用
    foreach(model.SelectedItems中选择的int){……}
    哦,亲爱的。您需要重新填充
    SelectList
    就是返回视图。请通读以了解
    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"}
            };
        }
    }
    
    [HttpGet]
    public ActionResult Index()
    {
        ModelVariables model = new ModelVariables()
        {
            DropDownItems = Repository.DDFetchItems()  
        };
        return View(model);
    }
    
    public class ModelVariables
    {
        public IEnumerable<int> SelectedItems { get; set; }
        public IEnumerable<SelectListItem> DropDownItems { get; set; }
    }
    
    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);
    }
    
    @Html.ListBoxFor(m => m.SelectedItems, Model.DropDownItems)