2017-04-17 73 views
1

我是新來MVC 5使用它,我的目標是過濾在我enum名單,我將在我的下拉列表如何篩選枚舉和下拉

public enum DayofWeekType 
{ 
     Monday=1, 
     Tuesday= 2, 
     Wednesday=3, 
     Thursday=4, 
     Friday= 5, 
     Saturday=6, 
     Sunday= 7 
} 

我只是想表明的是顯示星期五,星期六和星期日在下拉列表中,當登錄的用戶是非管理員,我不能找到解決方案enum字段Model,試圖在模型中添加條件,但總是與錯誤總結。試圖尋找LINQjQuery解決方案。

+3

這只是枚舉定義開始。你的過濾代碼在哪裏?你的代碼有什麼問題?你有錯誤?值不被過濾?目前看起來你希望我們從頭到尾解決你的任務 –

+1

你的模型是怎樣的? – MacakM

+0

@SergeyBerezovskiy沒有先生,我只想知道如果在這裏可以顯示您的視圖代碼的工作環境 –

回答

0
var weekValues = System.Enum.GetValues(typeof(DayofWeekType)); 
var weekNames = System.Enum.GetNames(typeof(DayofWeekType)); 

for (int i = 0; i <= weekNames.Length - 1 ; i++) { 
    ListItem item = new ListItem(weekNames[i], weekValues[i]); 
    ddlList.Items.Add(item); 
} 
0

你必須要在控制器級別對其進行過濾,按照下面的步驟來實現

  int[] eliminateDays = null; 
      // wrap enum into collection 
      var enumDaysCollection = (from dayName in Enum.GetNames(typeof(DayofWeekType)) 
            select new 
            { 
             Text = dayName.ToString(), 
             Value = (int)Enum.Parse(typeof(DayofWeekType), dayName) 
            }).ToList(); 
      // array contain days (enum values) which will be ignored as per user specific 
      // lets say you want to ignore monday, tuesday, wednesday, thursday 
      if (User.IsInRole("SomeUserRole")) 
      { 
       eliminateDays = new int[] { 1, 2, 3, 4 }; 
      } 
      else if (User.IsInRole("AnotherUserRole")) 
      { 
       eliminateDays = new int[] { 1, 3 }; 
      } 
      else 
      { 
       //For Admin will make empty so that it will show all days 
       eliminateDays = new int[] { }; 
      } 
      // filter collection 
      var dropDownItems = (from day in enumDaysCollection 
           let days = eliminateDays 
           where !days.Contains(day.Value) 
           select new SelectListItem 
           { 
            Text = day.Text, 
            Value = Convert.ToString(day.Value) 
           }).ToList(); 
      //send dropdownlist values to view 
      ViewBag.DropDownItems = dropDownItems; 

最後分配SelectListItem集合DROPDOWNLIST

@Html.DropDownList("DaysName", (List<SelectListItem>)ViewBag.DropDownItems, "Select Days..", new { @class = "dropdown" }) 
1

,你可以做這樣的

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

    if (IsUser) //your condition here 
    { 
     enumlist= enumlist.Skip(4); 

    } 

    ViewBag.enumlist = enumlist; 

在你看來

@Html.DropDownListFor(x=>x.Id,(IEnumerable<SelectListItem>) ViewBag.enumlist) 

.Skip將跳過第一4值與5th值是Friday