2011-11-01 19 views
5

Sé que esta pregunta se ha pedido bastante en SO.ListBoxPara no vincular mi viewmodel

here y here

Pero todavía no puedo averiguar el problema.

Estoy desarrollando un blog para enseñarme el framework MVC. Ahora cuando publico la vista a continuación, The ListBoxFor helper no vincula ningún valor a mi modelo. La lista contiene con éxito todas las categorías, pero cuando el controlador POST vuelve al modelo de vista, el objeto Categorías es nulo.

Aquí es el Modelo Vista:

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

El controlador:

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

La Vista:

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

¿Usted está consiguiendo el valor nulo en su acción POST o cuando se intenta representar la misma vista después de la acción POST? – epzee

Respuesta

9

creo que usted debe tener una propiedad de matriz en su modelo de vista, que los ID seleccionados se vincularán a.

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

Y cambiar su llamada Html.ListBoxFor ser para la propiedad SelectedCategoryIds.

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

Dicho sea de paso: Ahora que va a crear un cuadro de lista para la propiedad SelectedCategoryIds, si tiene una etiqueta de la lista debe cambiar esto sea para la propiedad SelectedCategoryIds también.

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

("Categories" es el texto de la etiqueta)

+0

+1 Esto realmente me ayudó a obtener un par de conceptos de viewmodel – PhilPursglove

+0

@fsmmu Tu PostViewModel no debe envolver una lista de categorías que son modelos de dominio. – Elisabeth

2

No es 100% seguro si entiendo su pregunta; pero este código ayuda? Muestra cómo puede buscar qué categorías se seleccionaron cuando se volvió a enviar el formulario al servidor.

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