2017-09-01 7 views
0

Je possède ce code dans mon contrôleur:annexant les résultats de ma méthode de commande à ma sélection liste déroulante MVC

public ActionResult GetTimeOptions(string Date, int SiteID) 
    { 
     DateTime pickUpDate = Convert.ToDateTime(Date); 
     Site site = SiteMgmt.GetSite(SiteID); 
     DateTime startTime = DateTime.MinValue; 
     DateTime endTime = DateTime.MinValue; 

     switch (pickUpDate.DayOfWeek) 
     { 
      case DayOfWeek.Sunday: 
       startTime = site.OOSunStart; 
       endTime = site.OOSunEnd; 
       break; 
      case DayOfWeek.Monday: 
       startTime = site.OOMonStart; 
       endTime = site.OOMonEnd; 
       break; 
      case DayOfWeek.Tuesday: 
       startTime = site.OOTueStart; 
       endTime = site.OOTueEnd; 
       break; 
      case DayOfWeek.Wednesday: 
       startTime = site.OOWedStart; 
       endTime = site.OOWedEnd; 
       break; 
      case DayOfWeek.Thursday: 
       startTime = site.OOThuStart; 
       endTime = site.OOThuEnd; 
       break; 
      case DayOfWeek.Friday: 
       startTime = site.OOFriStart; 
       endTime = site.OOFriEnd; 
       break; 
      case DayOfWeek.Saturday: 
       startTime = site.OOSatStart; 
       endTime = site.OOSatEnd; 
       break; 
      default: 
       break; 
     } 

     if(startTime > endTime) 
     { 
      endTime = endTime.AddDays(1); 
     } 

     List<string> results = new List<string>(); 
     if (pickUpDate.Date == DateTime.Now.Date) 
     { 
      if (startTime.TimeOfDay < DateTime.Now.TimeOfDay) 
      { 
       startTime = DateTime.Now.AddMinutes(site.leadTime); 
      } 
     } 

     DateTime tempTime = startTime; 

     do 
     { 
      tempTime = tempTime.AddMinutes(15); 
      results.Add(tempTime.TimeOfDay.ToString()); 
     } 
     while (tempTime <= endTime); 

     View().ViewData["availableTimes"] = results; 


     return View(); 
    } 

Ce code fonctionne juste la façon dont j'ai besoin de. Je dois ajouter les résultats de

View().ViewData["availableTimes"] = results; 

à ma liste de sélection. Voici ma liste de sélection:

$('#timepicker').append($('<option>', 
     { 
     value: View().ViewData["availableTimes"] = results, 
     text : results 
     })); 
    }); 

Ce code ne fonctionne cependant pas. Comment puis-je ajouter les résultats de ce contrôleur? Je sais que la méthode du contrôleur fonctionne parce que je l'ai traversé et vu le résultat générer les options dont j'ai besoin. Toute aide est géniale. Merci!

Répondre

1

Vous devez utiliser Razor sintax pour remplir la liste déroulante des éléments.

  1. Créer une liste de zone de liste déroulante avec @Html
  2. données Liez zone de liste déroulante

Quelque chose comme:

@ Html.DropDownListFor (m => m.SelectedItem, Model.ListOfItems, null, nouveau {@class = "form-control1 col-sm-8"})

où ListOfItems doit être chargé valeurs de zone de liste déroulante et lié à la liste déroulante.

+0

Donc, je n'ai pas de modèle. Je n'ai que le contrôleur et mon point de vue. Comment puis-je y arriver sans un modèle? @dkkd –

+0

Vous devez créer un modèle avec deux champs: public IEnumerable AvailableDates {get; ensemble; } et public Date SelectedDate {get; ensemble; } et dans le contrôleur remplissez l'objet modèle avec toutes les données de date disponibles et choisissez la date sélectionnée et quand vous appelez l'action du contrôleur et affichez les rendus, il chargera automatiquement toutes les données dans la combo et la valeur sélectionnée sera sélectionnée dans la combo. – dkkd

+0

Je n'ai pas beaucoup d'expérience avec les contrôleurs et les modèles. Pourriez-vous écrire un exemple de ce que vous voulez dire? En outre, toutes les données de date disponibles sont dynamiques. –

1

Vous pouvez la mettre en œuvre comme ceci:

  1. Créer un modèle et l'appeler DateViewModel.cs

    public class DateViewModel { AllDates IEnumerable public {get; ensemble; } public String SelectedDate {get; ensemble; }

    }

  2. Dans votre contrôleur créer ceci:

    public ActionResult GetTimeOptions() { DateViewModel dateModel = new DateViewModel();

    dateModel.AllDates = new[] 
        { 
         new SelectListItem { Value = "1", Text = "2017-01-22" }, 
         new SelectListItem { Value = "2", Text = "2017-01-23" }, 
         new SelectListItem { Value = "3", Text = "2017-01-25"} 
        }; 
    
        dateModel.SelectedDate = "2"; 
    
        return View(dateModel); 
    } 
    

On crée d'abord et la liste de charge avec des valeurs et puis mettre la date choisie pour 2.

  1. votre point de vue mis ceci:
    • au-dessus de la page mettre ceci:

@using YourAppName.Modèles @model DateViewModel

et créer une liste avec la syntaxe de rasoir: premier paramètre est sélectionné élément de modèle et le deuxième est la liste avec tous les articles binded au contrôle de la zone de liste déroulante

@ Html.DropDownListFor (m => m.SelectedDate , Model.AllDates)

  1. Lancez votre application et vous devriez avoir une liste déroulante contenant ces 3 dates et une sélectionnée pour être sélectionnée par défaut.