asp.net mvc modèle de vue fortement typée avec multiselect
-
18-09-2019 - |
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
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.