@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 sélectionné comme vrai pour ceux qui ont déjà stocké des valeurs pour Model.branch et Model.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 de division renvoyée est sélectionnée comme vraie pour l'élément sélectionné dans le modèle, mais côté vue, elle n'est pas sélectionnée.
Utilisez un 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 qui contiendront les valeurs sélectionnées.
Et un exemple complet de la bonne façon de créer une liste déroulante de sélection multiple à l'aide d'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'aide 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" })
Les valeurs sélectionnées soumises dans le contrôleur ressemblent à: