Afficher les éléments dans une liste déroulante
-
12-12-2019 - |
Question
J'essaie d'afficher dans une zone de liste déroulante une liste de « visites programmées » basée sur les entrées précédentes.Je suis capable de rassembler les informations, mais lorsque je les affiche, la zone de liste déroulante se transforme en zone de saisie et aucune de mes informations souhaitées n'est affichée.Le format dans lequel je souhaite que mes articles soient affichés est par :10/2/2012 - À l'école.
Voici ce que j'ai pour mon code :
C'est ici que je rassemble les informations de la visite - date et lieu
public JsonResult GetVisitDetails(Guid visitEntryId)
{
var model = new VisitDetailModel();
VisitEntry visitEntry = _visitEntryService.Get(visitEntryId);
if(visitEntry == null)
{
model.Message = string.Format(Message.NotFoundMessage, Resources.Entities.Visit.EntityName);
return Json(model);
}
model.VisitEntryId = visitEntryId;
model.VisitTypeId = visitEntry.VisitTypeId;
if (visitEntry.VisitType != null)
model.VisitType = visitEntry.VisitDate.ToShortDateString();
return Json(model);
}
#region Nested Type:VisitDetailModel
public class VisitDetailModel
{
public Guid VisitEntryId { get; set; }
public short VisitTypeId { get; set; }
public string VisitType { get; set; }
public string VisitDate { get; set; }
public string Message { get; set; }
}
#endregion
Voici ce que j'ai dans mon AddToViewModel :
var visits = _visitEntryService.FindAllForCase(viewModel.CaseId, _currentUser.OfficeId).Where(v=>v.VisitDate <= DateTime.Today.SetToMaximumTime()).OrderByDescending(v=>v.VisitDate).ToList();
visits.Insert(0, new VisitEntry());
viewModel.Visits = visits.ToSelectList("VisitEntryId", "Display", viewModel.VisitEntryId.ToString());
if(viewModel.VisitTypes.Count() == 0)
ModelState.AddModelError("",string.Format("No active {0} entered.", Kids.Resources.Entities.VisitType.EntityNamePlural));
Ma page .ascx pour afficher la liste déroulante :
<div class="row">
<%:Html.EditorFor(m=>m.VisitEntryId) %>
<%:Html.LabelFor(m=>m.Visits) %>
<%:Html.ValidationMessageFor(m=>m.VisitEntryId) %>
Mon modèle de vue :
[LocalizedDisplayName("VisitEntry", NameResourceType = typeof(VisitActivity))]
public short? VisitEntryId { get; set; }
[UIHint("DropDownList")]
[DropDownList(DropDownListTargetProperty = "VisitEntryId")]
public IEnumerable<SelectListItem> Visits { get; set; }
Toute information expliquant pourquoi je ne parviens pas à afficher une liste déroulante serait utile.
La solution
Dans votre ascx, vous faites EditorFor sur model.VisitEntryId
qui est un int
Tu as besoin d'un Html.DropDownFor
pour une liste déroulante.
Ton model.Visits
est une SelectList et je suppose que vous devriez faire :
<%:Html.LabelFor(m=>m.VisitEntryId) %>
<%:Html.EditorFor(m=>m.Visits) %>
<%:Html.ValidationMessageFor(m=>m.VisitEntryId) %>