2011-11-01 10 views
5

So che questa domanda è stata fatta abbastanza su SO.ListBoxPer non vincolare il mio modello di vista

here e here

Ma io ancora non riesco a capire il problema.

Sto sviluppando un blog per insegnarmi il framework MVC. Ora quando pubblico la vista qui sotto, l'helper ListBoxFor non associa alcun valore al mio modello. L'elenco contiene correttamente tutte le categorie, ma quando il controller POST recupera il modello di vista l'oggetto Categories è nullo.

Ecco il Model View:

public class PostViewModel 
{ 
    public Post Posts { get; set; } 
    public IEnumerable<Category> Categories { get; set; } 
} 

Il controllore:

public ActionResult Create() 
    { 
     PostViewModel post = new PostViewModel(); 
     post.Categories = db.ListCategories(); 
     return View(post); 
    } 

The View:

<p>@Html.ListBoxFor(model => model.Categories, new MultiSelectList(Model.Categories, "CategoryID", "CategoryName"))</p> 
+0

Si sta ottenendo il valore nullo nell'azione POST o quando si tenta di eseguire il rendering della stessa vista dopo l'azione POST? – epzee

risposta

9

credo che si dovrebbe avere una proprietà di matrice nel modello panorama che gli ID selezionati si collegheranno a.

public class PostViewModel 
{ 
    public Post Posts { get; set; } 
    public int[] SelectedCategoryIds { get; set; } 
    public IEnumerable<Category> Categories { get; set; } 
} 

e cambiare il tuo Html.ListBoxFor chiamata ad essere per la proprietà SelectedCategoryIds.

<p>@Html.ListBoxFor(model => model.SelectedCategoryIds, new MultiSelectList(Model.Categories, "CategoryID", "CategoryName"))</p> 

Per inciso: Ora che si sta creando una casella di riepilogo per la proprietà SelectedCategoryIds, se si dispone di un'etichetta per l'elenco si dovrebbe cambiare questo per essere per la proprietà SelectedCategoryIds troppo.

@Html.LabelFor(model => model.SelectedCategoryIds, "Categories") 

("Categories" è il testo dell'etichetta)

+0

+1 Questo mi ha davvero aiutato a ottenere un paio di concetti viewmodel – PhilPursglove

+0

@fsmmu PostViewModel non dovrebbe racchiudere un elenco di categorie che sono modelli di dominio. – Elisabeth

2

non al 100% sicuro se ho capito la tua domanda; ma questo codice aiuta? Mostra come è possibile recuperare le categorie selezionate al momento della pubblicazione del modulo sul server.

[HttpPost] 
public ActionResult Create(Post post, FormCollection formCollection) 
{ 
    var listOfCategoryIDs = formCollection["categories"]; 
    var arrayOfCategoryIDs = listOfCategoryIDs.Split(','); 
} 
Problemi correlati