2009-06-15 19 views
12

Me gustaría editar un objeto como el siguiente. Me gustaría que UsersSelectedList se completara con uno o más usuarios de UsersGrossList.¿Cómo se puede editar una lista de selección múltiple usando asp.net mvc?

Al usar las vistas de edición estándar en mvc, obtengo solo cadenas y booleanos (no se muestran a continuación) mapeados. Muchos de los ejemplos que encuentro en google utilizan versiones anteriores del framework mvc, mientras que uso el lanzamiento oficial 1.0.

Se agradecen todos los ejemplos de la vista.

public class NewResultsState 
{ 
    public IList<User> UsersGrossList { get; set; } 
    public IList<User> UsersSelectedList { get; set; } 
} 

Respuesta

6

Uso Html.ListBox en combinación con IEnumerable SelectListItem

Ver

  <% using (Html.BeginForm("Category", "Home", 
     null, 
     FormMethod.Post)) 
     { %> 
     <%= Html.ListBox("CategoriesSelected",Model.CategoryList)%> 

     <input type="submit" value="submit" name="subform" /> 
     <% }%> 

Controlador/Modelo:

 public List<CategoryInfo> GetCategoryList() 
    { 
     List<CategoryInfo> categories = new List<CategoryInfo>(); 
     categories.Add(new CategoryInfo{ Name="Beverages", Key="Beverages"}); 
     categories.Add(new CategoryInfo{ Name="Food", Key="Food"}); 
     categories.Add(new CategoryInfo { Name = "Food1", Key = "Food1" }); 
     categories.Add(new CategoryInfo { Name = "Food2", Key = "Food2" }); 
     return categories; 
    } 

    public class ProductViewModel 
    { 
     public IEnumerable<SelectListItem> CategoryList { get; set; } 
     public IEnumerable<string> CategoriesSelected { get; set; } 

    } 
    public ActionResult Category(ProductViewModel model) 
    { 
     IEnumerable<SelectListItem> categoryList = 
           from category in GetCategoryList() 
           select new SelectListItem 
           { 
            Text = category.Name, 
            Value = category.Key, 
            Selected = (category.Key.StartsWith("Food")) 
           }; 
     model.CategoryList = categoryList; 

     return View(model); 
    } 
8

Suponiendo que el modelo de usuario tiene propiedades ID y NAME:

<%= Html.ListBox("users", Model.UsersGrossList.Select(
    x => new SelectListItem { 
     Text = x.Name, 
     Value = x.Id, 
     Selected = Model.UsersSelectedList.Any(y => y.Id == x.Id) 
    } 
) %> 

O con vistas al Modelo

public class ViewModel { 
    public Model YourModel; 
    public IEnumerable<SelectListItem> Users; 
} 

controlador:

var usersGrossList = ... 
var model = ... 

var viewModel = new ViewModel { 
    YourModel = model; 
    Users = usersGrossList.Select(
     x => new SelectListItem { 
      Text = x.Name, 
      Value = x.Id, 
      Selected = model.UsersSelectedList.Any(y => y.Id == x.Id) 
     } 
    } 

Vista:

<%= Html.ListBox("users", Model.Users) %> 
1

@ eu-ge-ne < Gracias tanto por su respuesta - estaba teniendo reales problemas para encontrar una forma de multiseleccionar una lista de valores desde y hacia el modelo. Usando su código utilicé el control ListBoxFor Html en mi página de Edición/Actualización y pasé todo el modelo de nuevo a mi controlador (incluyendo los valores seleccionados múltiples) en Guardar.

<%= Html.ListBoxFor(model => model, Model.UsersGrossList.Select( 
x => new SelectListItem { 
    Text = x.Name, 
    Value = x.Id, 
    Selected = Model.UsersSelectedList.Any(y => y.Id == x.Id) 
} 

)%>

Cuestiones relacionadas