Obtenir plusieurs valeurs sélectionnées en Html.DropDownlistFor
@Html.DropDownListFor(m => m.branch, CommonMethod.getBranch("",Model.branch), "--Select--", new { @multiple = "multiple" })
@Html.DropDownListFor(m => m.division, CommonMethod.getDivision(Model.branch,Model.division), "--Select--", new { @multiple = "multiple" })
J'ai deux instances de DropDownListFor. Je veux définir selected comme true pour ceux qui ont précédemment stocké des valeurs pour le modèle.direction générale et le Modèle.division. Ce sont des tableaux de chaînes d'ID stockés
class CommonMethod
{
public static List<SelectListItem> getDivision(string [] branchid , string [] selected)
{
DBEntities db = new DBEntities();
List<SelectListItem> division = new List<SelectListItem>();
foreach (var b in branchid)
{
var bid = Convert.ToByte(b);
var div = (from d in db.Divisions where d.BranchID == bid select d).ToList();
foreach (var d in div)
{
division.Add(new SelectListItem { Selected = selected.Contains(d.DivisionID.ToString()), Text = d.Description, Value = d.DivisionID.ToString() });
}
}
}
return division;
}
}
La valeur renvoyée de division est sélectionnée comme true pour l'élément sélectionné dans le modèle, mais du côté de la vue, elle n'est pas sélectionnée.
2 réponses
Utiliser ListBoxFor
au lieu de DropDownListFor
:
@Html.ListBoxFor(m => m.branch, CommonMethod.getBranch("", Model.branch), "--Select--")
@Html.ListBoxFor(m => m.division, CommonMethod.getDivision(Model.branch, Model.division), "--Select--")
Les propriétés branch
et division
doivent évidemment être des collections contenant les valeurs sélectionnées.
Et un exemple complet de la manière appropriée de construire une liste déroulante de sélection multiple en utilisant un modèle de vue:
public class MyViewModel
{
public int[] SelectedValues { get; set; }
public IEnumerable<SelectListItem> Values { get; set; }
}
Qui serait rempli dans le contrôleur:
public ActionResult Index()
{
var model = new MyViewModel();
// preselect items with values 2 and 4
model.SelectedValues = new[] { 2, 4 };
// the list of available values
model.Values = new[]
{
new SelectListItem { Value = "1", Text = "item 1" },
new SelectListItem { Value = "2", Text = "item 2" },
new SelectListItem { Value = "3", Text = "item 3" },
new SelectListItem { Value = "4", Text = "item 4" },
};
return View(model);
}
Et dans la vue:
@model MyViewModel
...
@Html.ListBoxFor(x => x.SelectedValues, Model.Values)
C'est L'Assistant HTML qui présélectionnera automatiquement les éléments dont les valeurs correspondent à celles de la propriété SelectedValues
.
Pour moi, cela fonctionne aussi pour @Html.DropDownListFor
:
Modèle:
public class MyViewModel
{
public int[] SelectedValues { get; set; }
public IEnumerable<SelectListItem> Values { get; set; }
}
Contrôleur:
public ActionResult Index()
{
var model = new MyViewModel();
// the list of available values
model.Values = new[]
{
new SelectListItem { Value = "2", Text = "2", Selected = true },
new SelectListItem { Value = "3", Text = "3", Selected = true },
new SelectListItem { Value = "6", Text = "6", Selected = true }
};
return View(model);
}
Rasoir:
@Html.DropDownListFor(m => m.SelectedValues, Model.Values, new { multiple = "true" })
Soumis SelectedValues dans le contrôleur ressemble: