2017-04-18 12 views
0

ドロップダウンリストに表示するIEnumerableリストをどのように渡し/更新することができますか?私はそれを追加して更新するための一連の行がありません。enumlistテキストと値はArrivedCompletedです。ここで私は追加することができ、私のコントローラでIEnumerableリストの追加/更新

public enum DeliveryPermitStatus 
    { 

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

コード私のモデルでは、私の可算リストですenumlistと私はドロップダウンに表示するために使用される更新enumlistをviewbagするためのコードをしないのですがフィルター

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; 

答えて

2

あなたが求めている/したいことは、ViewBag.enumlistを編集して、ユーザーの役割に基づいて値を減らすことだと思いますか?あなたは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"); 
      } 

OR:もしそうなら、あなたはフィルタリングができ、あなたのif文の内部でリストを割り当て、foreachループを見送ります列挙型のリストについては、「利用可能な値」を追跡:

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

は、そうでない場合の要件は、質問自体 –

+0

これは間違いなく私ですから、非常に明確ではない、もっともらしいオプション1のように見えます探しています!ありがとうございます! –

0

あなたはIEnumerableをに要素を追加することはできませんが、簡単にそれからリストを取得することができます。 var enumlistに割り当てる前にToList()を呼び出すだけです。

今、あなたはそれに要素を追加することができます(それを列挙しながら、要素を追加していない、注意してください)

関連する問題