2010-01-05 12 views
6

Ich würde gerne wissen, wie ich meine Formularwerte an meine stark typisierte Ansicht von einer MultiSelect-Box binden kann.asp.net mvc stark typisierte Ansicht Modell mit Multiselect

Offensichtlich, wenn das Formular übergibt die Multi-Select-Box wird eine delittered Zeichenfolge meiner Werte ausgewählt ... Was ist der beste Weg, um diese Zeichenfolge von Werten zurück in eine Liste von Objekten zu meinem Modell anfügen zu konvertieren aktualisiert?

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

ich brauche jedoch erhalten irgendwie die Werte aus der Zeichenfolge zurück in Objekte: Ich bin mit Update wie unten

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

Wenn mein Modell in der Steuerung zu aktualisieren.

Ich glaube, es kann etwas mit Model-Binder zu tun haben, aber ich kann keine guten, klaren Beispiele finden, wie dies zu tun ist.

Danke !! Paul

Antwort

3

Sie haben Recht, dass ein Modellbinder der richtige Weg ist. Versuchen Sie das ...

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

Auschecken Phil Haacks blog post zu dem Thema. Ich habe das als Grundlage für eine stark selektierte Ansicht mit Mehrfachauswahl in einem aktuellen Projekt verwendet.

+0

Haack's Post ist über verbindliche Liste von Objekten, nicht Listboxen ... –