web-dev-qa-db-fra.com

Comment créer correctement un MultiSelect <select> à l'aide de l'assistant DropdownList?

(désolé, il y a plusieurs éléments ici mais aucun ne semble me permettre de faire fonctionner cela.)

Je veux créer un DropDownList qui permet une sélection multiple. Je suis capable de remplir la liste mais je ne parviens pas à faire fonctionner les valeurs actuellement sélectionnées.

J'ai les éléments suivants dans mon contrôleur:

ViewBag.PropertyGroups = from g in db.eFinGroups
                              where g.GroupType.Contents == "P"
                              select new
                              {
                                  Key = g.Key,
                                  Value = g.Description,
                                  Selected = true
                              };


ViewBag.SelectedPropertyGroups = from g in company.Entities .First().Properties.First().PropertyGroups select new { g.eFinGroup.Key, Value = g.eFinGroup.Description };

Selon moi, j'ai:

@Html.DropDownListFor(model => model.PropertyGroupsX, 
   new MultiSelectList(ViewBag.PropertyGroups
             , "Key", "Value"
             , ViewBag.SelectedPropertyGroups), 
new { @class = "chzn-select", data_placeholder = "Choose a Property Group", multiple = "multiple", style = "width:350px;" })

PropertyGroupX est une chaîne [] dans le modèle.

J'ai essayé tous les types d'itérations avec les propriétés sélectionnées ... en passant juste la valeur, juste la clé, les deux, etc.

De plus, quel type est censé être PropertyGroupX? Le tableau de chaînes est-il correct? Ou doit-il s'agir d'un dictionnaire contenant les groupes de propriétés actuels? J'ai vraiment du mal à trouver un document à ce sujet.

Quelqu'un a suggéré que je devrais utiliser ListBoxFor. J'ai changé pour cela et j'ai toujours le même problème. Les valeurs sélectionnées ne sont pas définies comme sélectionnées lors du rendu des balises d'option. Voici ce que j'ai essayé:

@ Html.ListBoxFor (model => model.PropertyGroups, new MultiSelectList (ViewBag.PropertyGroups, "Key", "Value"))

J'ai essayé le model.PropertyGroups en tant que collection de chaînes correspondant aux valeurs, en tant que collection de Guid correspondant à ces ID et en tant que type anonyme avec à la fois une clé et une valeur pour correspondre aux éléments du ViewBag. Rien ne semble fonctionner.

28
PilotBob

Vous n'utilisez pas DropDownListFor si vous souhaitez créer une liste multisélection. Vous utilisez l'assistant ListBoxFor.

Voir le modèle:

public class MyViewModel
{
    public string[] SelectedIds { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}

Manette:

public ActionResult Index()
{
    var model = new MyViewModel
    {
        // preselect the first and the third item given their ids
        SelectedIds = new[] { "1", "3" }, 

        // fetch the items from some data source
        Items = Enumerable.Range(1, 5).Select(x => new SelectListItem
        {
            Value = x.ToString(),
            Text = "item " + x
        })
    };
    return View(model);
}

Vue:

@model MyViewModel
@Html.ListBoxFor(x => x.SelectedIds, Model.Items)
55
Darin Dimitrov