2017-04-18 1 views
0

Je veux juste demander comment je peux passer/mettre à jour une liste IEnumerable qui sera utilisée pour montrer dans la liste déroulante parce que je manque un ensemble de lignes pour l'ajouter et mettre à jour enumlist de sorte que je peux seulement obtenir le texte et la valeur Arrived et Completed. Voici ma liste Enumerable dans mon modèleAjouter/Mettre à jour IEnumerable List

public enum DeliveryPermitStatus 
    { 

     Arrived = 1, 
     Approved = 2, 
     Cancelled = 3, 
     Completed = 4, 
     Submitted = 5 
    } 

code dans mon contrôleur je peux ajouter le filtre enumlist et je suis code manquant à ViewBag la enumlist mise à jour qui sera utilisé pour afficher dans la liste déroulante

var enumlist = Enum.GetValues(typeof(DeliveryPermitStatus)).Cast<DeliveryPermitStatus>().Select(v => new SelectListItem 
       { 
        Text = v.ToString(), 
        Value = ((int)v).ToString() 
       }); 

       if (User.IsInRole(StaticRoleNames.Admin)) //your condition here 
       { 
        foreach(var item in enumlist) 
        { 
         if(item.Text == "Arrived" || item.Text == "Completed") 
         { 
          //Missing Code Here 

         } 
        } 

       } 

       ViewBag.enumlist = enumlist; 

Répondre

2

Je pense que ce que vous demandez/voulez faire est éditer le ViewBag.enumlist pour être un ensemble réduit de valeurs basées sur le rôle d'un utilisateur? Si oui, alors vous pouvez filtrer et affecter la liste dans votre instruction if et renoncer à la boucle foreach:

var enumlist = Enum.GetValues(typeof(DeliveryPermitStatus)).Cast<DeliveryPermitStatus>().Select(v => new SelectListItem 
      { 
       Text = v.ToString(), 
       Value = ((int)v).ToString() 
      }); 

      if (User.IsInRole(StaticRoleNames.Admin)) //your condition here 
      { 
       ViewBag.enumlist = enumlist.Where(t => t.Text == "Arrived" || t.Text == "Completed"); 
      } 

OU, si vous avez besoin de garder la boucle foreach, vous devrez créer une liste séparée garder une trace des « valeurs disponibles » pour la liste des ENUM:

var enumlist = Enum.GetValues(typeof(DeliveryPermitStatus)).Cast<DeliveryPermitStatus>().Select(v => new SelectListItem 
      { 
       Text = v.ToString(), 
       Value = ((int)v).ToString() 
      }); 

      List<SelectListItem> availableOptions = new List<SelectListItem>(); 

      if (User.IsInRole(StaticRoleNames.Admin)) //your condition here 
      { 
       foreach(var item in enumlist) 
       { 
        if(item.Text == "Arrived" || item.Text == "Completed") 
        { 
         availableOptions.Add(item); 
        } 
       } 

      } 

      ViewBag.enumlist = availableOptions; 
+2

On dirait l'option plausible +1, sinon les exigences ne sont pas très claires de la question elle-même –

+0

C'est sans aucun doute ce que je suis à la recherche! Merci Monsieur! –

0

vous ne pouvez pas ajouter des éléments à un IEnumerable, mais vous pouvez facilement obtenir une liste de celui-ci. Appelez simplement ToList() avant d'affecter votre var enumlist.

Maintenant, vous pouvez ajouter des éléments à ce (attention, ne pas ajouter des éléments tout en énumérant il)