Question

Je voudrais savoir comment je peux lier mes valeurs de formulaire à mon avis fortement typé d'une boîte MultiSelect.

Il est évident que lorsque la forme présente la boîte multi-sélection présentera une chaîne delittemered de mes valeurs sélectionnées ... quelle est la meilleure façon de convertir cette chaîne de valeurs de nouveau dans une liste d'objets à attacher à mon modèle à être mis à jour ?

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

Lors de la mise à jour de mon modèle à l'intérieur du contrôleur j'utilise UpdateModel comme ci-dessous:

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

Cependant, je dois obtenir en quelque sorte les valeurs de la chaîne en objets.

Je beleive il peut avoir quelque chose à voir avec le modèle classeurs, mais je ne peux pas trouver de bons exemples clairs de la façon de le faire.

Merci !! Paul

Était-ce utile?

La solution

Vous avez raison qu'un modèle de liaison est la voie à suivre. Essayez ceci ...

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);
    }
}

Autres conseils

Consultez blog Phil Haacks sur le sujet. Que j'ai utilisé comme base pour une vue sélectionner plusieurs éléments fortement typé dans un récent projet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top