2012-09-06 11 views
5

Sto sviluppando un'applicazione MVC che contiene l'elenco a discesa multiselect. Voglio ottenere gli ID di più elementi selezionati del menu a discesa.Come passare gli elementi selezionati dell'elenco multiselect al controller?

Ho il codice nel modello di

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

e il codice di controllo è

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

Non ricevo cosa scrivere in vista, ho provato il codice diverso, ma io sono sempre fonte di confusione .. .

Codice in 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> 

Voglio mostrare il CustomerName list in Visualizza, così posso selezionare il nome di più clienti e passare di nuovo l'ID cliente selezionato al controller. Come si fa?

+0

Puoi postare ciò che hai provato finora nella visualizzazione? La tua vista fa riferimento a 'CustomerList' come modello nel formato previsto? Ad esempio '@model IList '. Dovresti anche dichiarare l'elenco come 'IList ' invece di 'Lista ' nel tuo codice. – Nope

+0

Ho usato il seguente codice. '@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

ho aggiunto che il codice alla tua domanda, più facile da leggere :) – Nope

risposta

15

Utilizzando un modello di involucro con una proprietà di legare i clienti selezionati per lavori (l'ho provato):

Wrapper Modello:

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

Controller:

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

È necessario qualcosa per associare la selezione e inviarla al controller.

+0

Grazie Nathalie Kellenberger, Dove aggiungi questa classe wrapper? Nel modello del cliente stesso? – bnil

+0

Se devo aggiungere la vista fortemente digitata? Ho creato Empty view.Io sto rilevando un errore su '@ Model.Customer' e l'errore è 'System.Web.Mvc.MultiSelectList.MultiSelectList (System.Collections.IEnumerable, string, string, System.Collections.IEnumerable)' ha alcuni argomenti non validi – bnil

+0

Grazie ... Funziona .. – bnil

Problemi correlati