2010-01-05 14 views
6

Me gustaría saber cómo puedo enlazar mis valores de formulario a mi vista fuertemente tipada desde un cuadro MultiSelect.asp.net mvc fuertemente tipado ver modelo con multiselect

Obviamente cuando el formulario envía el cuadro de selección múltiple enviará una cadena delittemered de mis valores seleccionados ... ¿cuál es la mejor manera de convertir esta cadena de valores de nuevo en una lista de objetos para adjuntar a mi modelo para ser ¿actualizado?

public class MyViewModel { 
    public List<Genre> GenreList {get; set;} 
    public List<string> Genres { get; set; } 
} 

Al actualizar mi modelo dentro del controlador estoy usando UpdateModel, como a continuación:

Account accountToUpdate = userSession.GetCurrentUser(); 
UpdateModel(accountToUpdate); 

Sin embargo tengo que conseguir de alguna manera los valores de la cadena de nuevo en objetos.

Creo que puede tener algo que ver con las carpetas modelo, pero no puedo encontrar ningún buen ejemplo claro de cómo hacerlo.

Gracias! Paul

Respuesta

3

Tiene razón en que una carpeta modelo es el camino a seguir. Intente esto ...

using System.ComponentModel; 
using System.ComponentModel.DataAnnotations; 
using System.Web.Mvc; 

[ModelBinder(typeof(MyViewModelBinder))] 
public class MyViewModel { 
    .... 
} 

public class MyViewModelBinder : DefaultModelBinder { 
    protected override void SetProperty(ControllerContext context, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value) { 
     if (propertyDescriptor.Name == "Genres") { 
      var arrVals = ((string[])value)[0].Split(','); 
      base.SetProperty(context, bindingContext, propertyDescriptor, new List<string>(arrVals)); 
     } 
     else 
      base.SetProperty(context, bindingContext, propertyDescriptor, value); 
    } 
} 
0

Consulte Phil Haacks blog post sobre el tema. Lo usé como base para una vista de selección múltiple fuertemente tipada en un proyecto reciente.

+0

La publicación de Haack trata de una lista vinculante de objetos, no listboxes ... –

Cuestiones relacionadas