2012-09-06 102 views
5

Estoy desarrollando una aplicación MVC que contiene la lista desplegable multiselect. Quiero obtener las identificaciones de múltiples elementos seleccionados del menú desplegable.¿Cómo pasar elementos seleccionados de la lista multiselect al controlador?

que tienen el código en el modelo

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

y el código del controlador es

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

no estoy recibiendo lo que escribir en la vista, he tratado de código diferente pero estoy conseguir confuso .. .

Código

en Vista:

@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> 

Quiero mostrar el CustomerName list en la vista, por lo que puedo seleccionar varios nombres de clientes y pasar los ID de clientes seleccionados de nuevo al controlador. ¿Cómo hacer eso?

+0

¿Puedes publicar lo que has intentado hasta ahora en la vista? ¿Su referencia hace referencia a 'CustomerList' como modelo en el formato esperado? Por ejemplo '@model IList '. También debe declarar la lista como 'IList ' en lugar de 'List ' en su código. – Nope

+0

He usado el siguiente código. '@model CustomerDEMOForMultiselect.Models.Customer @ { Layout = null; } DisplayCustomer

@using (Html.BeginForm()) { @Html.DropDownListFor(v => v.ID,new MultiSelectList(ViewBag.CustList,"ID","Name",ViewBag.ID))
}
' – bnil

+0

que añadió que el código a su pregunta, más fácil de leer :) – Nope

Respuesta

15

Utilizando un modelo de envoltura con una propiedad de unirse a los clientes seleccionados para obras (lo probé):

Envoltura Modelo:

public class CustomerList 
{ 
    public List<Customer> Customers { get; set; } 
    public List<int> SelectedIDs { get; set; } 
} 

controlador:

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

Vista:

@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" /> 
} 

Necesita algo para vincular su selección y enviarla al controlador.

+0

Gracias Nathalie Kellenberger, Dónde agregar esta clase contenedora? En el modelo de cliente en sí? – bnil

+0

Si tengo que agregar una vista fuertemente tipada? He creado Vista vacía. Estoy generando un error en '@ Model.Customer' Y el error es 'System.Web.Mvc.MultiSelectList.MultiSelectList (System.Collections.IEnumerable, string, string, System.Collections.IEnumerable)' tiene algunos argumentos no válidos – bnil

+0

Gracias ... Funciona ... – bnil

Cuestiones relacionadas