C'est ma première question, et c'est probablement une mauvaise, de sorte s'il vous plaît être doux.
Mon travail sur mon premier ASP.Net MVC2 web app récemment, je suis tombé sur quelques questions quand j'en avais besoin pour sélectionner plusieurs valeurs dans une liste déroulante. J'ai travaillé autour avec un peu de jQuery, mais est allé de l'avant et de mettre ensemble quelques code très simple à démontrer. Je suis à l'aide de EF pour le modèle, avec deux entités - Clients et HelpDeskCalls:
Contrôleur:
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 en sélectionnant HelpDeskCall.Les id qui sont même un. Je suis en train d'essayer deux syntaxes différentes pour ListBoxFor: On utilise un IEnumerable de valeurs pour les sélections, à l'aide d'un IEnumerable de SelectListItems. Par défaut, lorsque j'exécute ce code, aucune sélection n'est faite, soit ListBoxFor, mais non fortement typé ListBox sélectionne correctement.
J'ai lu ce post sur ASP.Net et ce fil , mais pas de joie. En fait, si j'ajoute le remplacement ToString() de mon HelpDeskCall classe (comme suggéré dans le ASP.net thread) toutes les valeurs sont sélectionnées, ce qui n'est pas bon.
Si quelqu'un pouvait jeter une certaine lumière sur la façon dont cela devrait fonctionner (et ce que je suis absent ou faire du tort), néophyte en serais très reconnaissant.
Jean