En travaillant sur ma première application Web ASP.Net MVC2 récemment, j'ai rencontré quelques problèmes lorsque j'ai dû sélectionner plusieurs valeurs dans une zone de liste. J'ai travaillé autour avec un peu de jQuery, mais je suis allé de l'avant et j'ai mis en place un code très simple à démontrer. J'utilise EF pour le modèle, avec deux entités - Les clients et HelpDeskCalls:Challenges avec la sélection des valeurs dans ListBoxFor
Controller:
public ActionResult Edit(int id)
{
Customer currCustomer = ctx.Customers.Include("HelpDeskCalls").Where(c => c.ID == id).FirstOrDefault();
List<HelpDeskCall> currCustCalls = (ctx.HelpDeskCalls.Where(h => h.CustomerID == id)).ToList();
List<SelectListItem> currSelectItems = new List<SelectListItem>();
List<String> selectedValues = new List<string>();
foreach (HelpDeskCall currCall in currCustCalls)
{
bool isSelected = (currCall.ID % 2 == 0) ? true : false;
//Just select the IDs which are even numbers...
currSelectItems.Add(new SelectListItem() { Selected = isSelected, Text = currCall.CallTitle, Value = currCall.ID.ToString() });
//add the selected values into a separate list as well...
if (isSelected)
{
selectedValues.Add(currCall.ID.ToString());
}
}
ViewData["currCalls"] = (IEnumerable<SelectListItem>) currSelectItems;
ViewData["currSelected"] = (IEnumerable<String>) selectedValues;
return View("Edit", currCustomer);
}
Vue:
<div class="editor-field">
<%: Html.ListBoxFor(model => model.HelpDeskCalls, new MultiSelectList(Model.HelpDeskCalls, "ID", "CallTitle", (IEnumerable) ViewData["currSelected"]), new { size = "12" })%>
<%: Html.ListBoxFor(model => model.HelpDeskCalls, ViewData["currCalls"] as IEnumerable<SelectListItem>, new { size = "12"}) %>
<%: Html.ListBox("Model.HelpDeskCalls", new MultiSelectList(Model.HelpDeskCalls, "ID", "CallTitle", (IEnumerable)ViewData["currSelected"]), new { size = "12"}) %>
<%: Html.ValidationMessageFor(model => model.HelpDeskCalls) %>
</div>
Pour cet exemple, je suis juste sélectionner HelpDeskCall. Les ID qui sont pairs. J'essaie deux syntaxes différentes pour ListBoxFor: L'une utilise un IEnumerable de valeurs pour les sélections, l'autre utilise un IEnumerable de SelectListItems. Par défaut, lorsque je cours ce code, aucune sélection n'est faite à ListBoxFor, mais la ListBox non fortement typée sélectionne correctement. Je lis this post sur ASP.Net et this thread sur SO, mais pas de joie. En fait, si j'ajoute le remplacement ToString() à ma classe HelpDeskCall (comme suggéré dans le thread ASP.net), toutes les valeurs sont sélectionnées, ce qui n'est pas correct non plus.
Si quelqu'un pouvait faire la lumière sur la façon dont cela devrait fonctionner (et ce qui me manque ou mal faire), alors ce néophyte serait très reconnaissant.
Oui, cela fonctionne. Merci! – JohnMc0831
Brillant! J'ai passé un moment à essayer de faire fonctionner ça. Cela a fonctionné pour moi aussi. Merci beaucoup! Upvoting. –
ty! Cela m'a aidé beaucoup. – Kevin