Asp.net mvc 如何通过多选列表';是否将所选项目返回控制器?

Asp.net mvc 如何通过多选列表';是否将所选项目返回控制器?,asp.net-mvc,asp.net-mvc-3,razor,Asp.net Mvc,Asp.net Mvc 3,Razor,我正在开发一个包含multiselect下拉列表的MVC应用程序。 我想获取下拉列表中多个选定项的ID 我有模型中的代码 namespace CustomerDEMOForMultiselect.Models { public class Customer { private int _ID; private string _Name; private double _Amt; public int ID { get

我正在开发一个包含multiselect下拉列表的MVC应用程序。 我想获取下拉列表中多个选定项的ID

我有模型中的代码

namespace CustomerDEMOForMultiselect.Models
{
    public class Customer
    {
        private int _ID;
        private string _Name;
        private double _Amt;
        public int ID { get { return _ID; } set { _ID = value; }  }
        public string Name { get { return _Name; } set { _Name = value ; } }
        public double Amt { get { return _Amt; } set { _Amt = value; } }
    }
}
控制器代码为

namespace CustomerDEMOForMultiselect.Controllers
{
    public class CustomerController : Controller
    {
        public ActionResult DisplayCustomer()
        {
            Customer oCustomer = new Customer();
            List<Customer> CustomersList = new List<Customer>();
            CustomersList.Add(new Customer() { ID = 1, Name = "TestCustomer1", Amt = 123 });
            CustomersList.Add(new Customer() { ID = 2, Name = "TestCustomer2", Amt = 234 });
            CustomersList.Add(new Customer() { ID = 3, Name = "TestCustomer3", Amt = 324 });
            ViewBag.CustList = CustomersList;
            return View(CustomersList);
          }
    }
}
命名空间CustomerDEMOForMultiselect.Controller
{
公共类CustomerController:控制器
{
公共操作结果显示客户()
{
客户oCustomer=新客户();
List CustomerList=新列表();
添加(新客户(){ID=1,Name=“TestCustomer1”,Amt=123});
添加(新客户(){ID=2,Name=“TestCustomer2”,Amt=234});
添加(新客户(){ID=3,Name=“TestCustomer3”,Amt=324});
ViewBag.CustList=客户列表;
返回视图(CustomerList);
}
}
}
我不明白该写什么,我尝试了不同的代码,但我感到困惑

视图中的代码:

@model CustomerDEMOForMultiselect.Models.Customer 
@{
    Layout = null;
} 
<!DOCTYPE html>
<html>
    <head>
         <title>DisplayCustomer</title> 
    </head> 
    <body>
        <div>
             @using (Html.BeginForm())
             {
                 @Html.DropDownListFor(v => v.ID, new MultiSelectList(ViewBag.CustList,"ID","Name",ViewBag.ID)) 
                 <br /> 
                 <input type="submit" value="Submit" />
             } 
        </div> 
    </body> 
</html>
@model CustomerDEMOForMultiselect.Models.Customer
@{
布局=空;
} 
显示客户
@使用(Html.BeginForm())
{
@DropDownListFor(v=>v.ID,新的MultiSelectList(ViewBag.CustList,“ID”,“Name”,ViewBag.ID))

}
我想在视图中显示
客户名称列表
,这样我就可以选择多个客户名称并将这些选定的客户ID传回控制器。
如何做到这一点?

使用带有属性的包装器模型将选定的客户绑定到works(我尝试过):

包装器型号:

public class CustomerList
{
    public List<Customer> Customers { get; set; }
    public List<int> SelectedIDs { get; set; }
}
公共类客户列表
{
公共列表客户{get;set;}
公共列表SelectedDS{get;set;}
}
控制器:

        [HttpGet]
        public ActionResult DisplayCustomer()
        {
            Customer oCustomer = new Customer();
            List<Customer> CustomersList = new List<Customer>();
            CustomersList.Add(new Customer() { ID = 1, Name = "TestCustomer1", Amt = 123 });
            CustomersList.Add(new Customer() { ID = 2, Name = "TestCustomer2", Amt = 234 });
            CustomersList.Add(new Customer() { ID = 3, Name = "TestCustomer3", Amt = 324 });
            ViewBag.CustList = CustomersList;
            return View(new CustomerList() { Customers = CustomersList }); 

        }

        [HttpPost]
        public void DisplayCustomer(List<int> selectedIds)
        {
            // do something with the id list
        }
[HttpGet]
公共操作结果显示客户()
{
客户oCustomer=新客户();
List CustomerList=新列表();
添加(新客户(){ID=1,Name=“TestCustomer1”,Amt=123});
添加(新客户(){ID=2,Name=“TestCustomer2”,Amt=234});
添加(新客户(){ID=3,Name=“TestCustomer3”,Amt=324});
ViewBag.CustList=客户列表;
返回视图(新CustomerList(){Customers=CustomerList});
}
[HttpPost]
public void display客户(列出所选的EDID)
{
//对id列表做些什么
}
视图:

@model mvcapapplication2.Models.CustomerList
@使用(Html.BeginForm(@Model.selectedds))
{
@Html.ListBoxFor(m=>m.selecteds,新的MultiSelectList(@Model.Customers,“ID”,“Name”,“@Model.selecteds))
}

您需要一些东西来绑定您的选择并将其发送回控制器。

您能在视图中发布您迄今为止尝试过的内容吗?您的视图是否将
CustomerList
作为预期格式的模型引用?例如
@model-IList
。您还应该在代码中将列表声明为
IList
,而不是
list
<代码>@model CustomerDEMOForMultiselect.Models.Customer@{Layout=null;}使用(Html.BeginForm()){@Html.DropDownListFor(v=>v.ID,新的MultiSelectList(ViewBag.CustList,“ID”,“Name”,ViewBag.ID))
我将该代码添加到您的问题中,更易于阅读:)感谢Nathalie Kellenberger,在哪里添加此包装器类?在客户模型本身中?是否必须添加视图强类型?我创建了空视图。我在
@Model.Customer
上发现一个错误,错误是“System.Web.Mvc.MultiSelectList.MultiSelectList(System.Collections.IEnumerable,string,string,System.Collections.IEnumerable)”有一些无效的参数作为旁注,在声明属性时尝试使用接口,而不是conrecte实现。i、 e:将
public List Customers{get;set;}
更改为
public IList Customers{get;set;}
等等。包装类本身就是一个模型,因此您可以将其添加到模型文件夹中。您需要有一个强类型视图。使用此解决方案,我们可以从MultiSelectList中获取所选项目。如何获取MultiSelectList中的所有项目?我使用的是列表动态变化的MultiSelectList。
@model MvcApplication2.Models.CustomerList

@using (Html.BeginForm(@Model.SelectedIDs))
{
    @Html.ListBoxFor(m => m.SelectedIDs, new MultiSelectList(@Model.Customers, "ID", "Name", @Model.SelectedIDs))
    <input type="submit" value="save" />
}