web-dev-qa-db-fra.com

Comment fonctionne une liste de sélection multiple avec la liaison de modèle dans ASP.NET MVC?

Si vous avez une liste de sélection définie sur plusieurs dans ASP.NET MVC, comment fonctionne la liaison de modèle?

Que renvoie-t-il pour vos éléments sélectionnés, un tableau?

<SELECT NAME="toppings" MULTIPLE SIZE=5>
    <option value="mushrooms">mushrooms</option>
    <option value="greenpeppers">green peppers</option>
    <option value="onions">onions</option>
    <option value="tomatoes">tomatoes</option>
    <option value="olives">olives</option>
</SELECT>
50
Simpatico

Oui, par défaut, une liste multisélection sera publiée via un tableau des valeurs sélectionnées.

Cet article contient de plus amples informations, y compris comment utiliser des vues fortement typées avec une liste multisélection.

De l'article "lié":

  • Votre modèle ou classe de modèle de vue a besoin d'une propriété de collection pour les ID des éléments d'options sélectionnés, par exemple List<int> ToppingIds.
  • Dans la méthode d'action du contrôleur à laquelle le formulaire contenant vos POST de liste de sélection multiple, vous pouvez accéder aux éléments d'option sélectionnés via la propriété de collection que vous avez ajoutée au modèle ou afficher la classe de modèle.
26
Sam Wessel

Oui, il renvoie un tableau.

Voir le modèle:

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

Manette:

public ActionResult Index()
{
    var model = new MyViewModel
    {
        // fetch the items from some data source
        Items = Enumerable.Select(x => new SelectListItem
        {
            Value = x.Id,
            Text = "item " + x.Id
        })
    };
    return View(model);
}

Vue:

@model MyViewModel
@Html.ListBoxFor(x => x.SelectedIds, Model.Items)
24
Hbas

Dans VegTableViewmodel:

public IEnumerable<MultiSelectList> Vegetables { get; set; }

Dans la liste Contrôleur: obtenir des légumes, puis passez-la à la propriété Vegetables de VegTableViewModel.

viewmodel.Vegetables = vegetables .Select(d => new MultiSelectList(d.VegName));

Dans la vue:

@Html.ListBoxFor(m => m.L, new MultiSelectList(Model.Vegetables.Select(d => d.Items))
7
Sreenath Plakkat