我只是想问一下如何传递/更新将用于在下拉列表中显示的IEnumerable列表,因为我缺少一组行来添加它并更新enumlist
以便我只能得到文字和值Arrived
和Completed
。这是我模型中的可枚举列表
public enum DeliveryPermitStatus
{
Arrived = 1,
Approved = 2,
Cancelled = 3,
Completed = 4,
Submitted = 5
}
我的控制器中的代码,以便我可以添加已过滤的enumlist
,并且我缺少代码以查看将用于在下拉列表中显示的更新enumlist
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;
答案 0 :(得分:2)
我认为您要求/想要做的是根据用户的角色将ViewBag.enumlist
编辑为一组简化的值?如果是这样,那么你可以过滤并在if语句中分配列表并放弃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");
}
或者,如果你需要保留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;
答案 1 :(得分:0)
您无法向IEnumerable添加元素,但您可以轻松地从中获取List。 只需在分配给你的var enumlist之前调用ToList()。
现在你可以添加元素了(注意,枚举时不要添加元素)