2012-04-05 14 views
7

Ho una lista di stored procedure di tipo che hanno un ID e un Nome come dati in esso. Ho una proprietà di tipo int nel modello e un elenco della stessa stored procedure. Ora voglio legare queste informazioni in ListBoxForCome compilare ListBoxFor in Mvc3?

in vista ho scritto questo

@Html.ListBoxFor(x => x.HobbyId, new MultiSelectList(Model.listHobby, "pkHobbyId", "Hobby")) 

ma sto ottenendo un errore

Il parametro 'espressione' deve essere valutata come un IEnumerable quando è consentita una selezione multipla.

Si prega di aiuto come legare.

+0

Si prega di inviare anche il modello. Che tipo è listHobby ?. Come si imposta valori ad esso ?. – Iridio

risposta

7

provare che

@Html.ListBoxFor(x => x.HobbyId, Model.listHobby.Select(f => new SelectListItem { Text = f.Hobby, Value = f.pkHobbyId.ToString() }), new { Multiple = "multiple" }) 

listHobby è la lista IEnumerable sul mio campione


scusa se ti ho indurre in errore, si precipitò a rispondere, ma non è possibile ottenere il risultato della casella di riepilogo selezione multipla in un GUID o int variabile (qualunque sia il tuo tipo HoobyId) dovresti avere un array per afferrare il risultato come

public string[] SelectedHobbyIds { get; set; } 

quindi ci deve essere qualcosa di sbagliato con i tuoi visualizzare i modelli per cui il suo migliore che u sarebbe pubblicare i tuoi modelli di visualizzazione per controllare

+0

sì capisco che sto restituendo il valore in id hobby che è di int considerando che devo tornare in una collezione. – Rachit

3
@Html.ListBoxFor(x => x.HobbyId, Model.listHobby.Select(f => new SelectListItem { Text = f.Hobby, Value = f.pkHobbyId.ToString() }), new { Multiple = "multiple" }) 

HobbyId in espressione deve essere IEnumerable perché si imposta a più selezionare

+0

non ha funzionato per me // controller public ActionResult AddEditSupplier (int id) { clsSupplier _supp = new clsSupplier(); _supp.lstDocImgs = _supp.listDocImages(); // funziona correttamente _supp.lstDocFiles = _supp.listDocFiles(); // funziona bene return View (_supp); } // Visualizza ma in vista entrambi non stanno lavorando @ Html.ListBoxFor (x => x.DocumentId, nuova SelectList (Model.lstDocImgs, "DocumentID", "titolo")) @Html.ListBoxFor (x => x.DocumentId, Model.lstDocImgs.Select (f => new SelectListItem {Text = f.Title, Value = f.documentid.ToString()}), new {Multiple = "multiple"}) –

5

@ Chhatrapati Sharma,

nel controller, provate questo,

ViewData['anyName'] = new SelectList { 
Text = , // text from ur function 
Value = , // Value from function 
Selected = // if required 
} 

e in vista, legare il viewdata come,

<@Html.ListBox("docImages", ((IEnumerable<SelectListItem>)ViewData["anyName"])) 

Per il test, provare un oggetto campione SelectList come segue,

ViewData['anyName'] = new List<SelectListItem>{ 
       new SelectListItem {Text = "First", Value = "0"}, 
       new SelectListItem {Text = "Second"), Value = "1"}, 
       new SelectListItem {Text = "Third", Value = "2"} 
        }; 

Se funziona questo campione, quindi controllare la funzione "_supp.listDocImages()" e assicurarsi che tornare IList