C# 字典、枚举或其他在MVC中实现任务优先级的替代方案?
我的数据库中有一个任务表,其中的优先级字段包含一个从1到4的整数值作为测试。我使用的是LINQ to SQL dbml文件,因此我有一个任务类,我希望能够在视图中向用户显示优先级的文本值,作为选择列表中的值 我已将以下代码添加到我的任务类中:C# 字典、枚举或其他在MVC中实现任务优先级的替代方案?,c#,model-view-controller,dictionary,enums,C#,Model View Controller,Dictionary,Enums,我的数据库中有一个任务表,其中的优先级字段包含一个从1到4的整数值作为测试。我使用的是LINQ to SQL dbml文件,因此我有一个任务类,我希望能够在视图中向用户显示优先级的文本值,作为选择列表中的值 我已将以下代码添加到我的任务类中: static enum Priorities { High = 1, Medium = 2, Low = 3, None = 4 } public String Ge
static enum Priorities {
High = 1,
Medium = 2,
Low = 3,
None = 4
}
public String GetPriority {
get {
Priorities p = (Priorities)priority;
return p.ToString();
}
}
我想在下拉列表中使用优先级,但我不确定如何做到这一点,首先获取要放入选择列表的值列表,然后为任务对象选择正确的值:(
我想改为做下面的事情并使用字典,但如果有人有一些建议或更好的解决方案,那将非常有用,谢谢
static IDictionary<string, int> priorityDictionary =
new Dictionary<string, int>(){
{"High", 1},
{"Medium", 2},
{"Low", 3},
{"None", 4}
};
public static IEnumerable<string> Priorities {
get { return priorityDictionary.Keys; }
}
静态IDictionary优先词典=
新字典(){
{“高”,1},
{“中等”,2},
{“低”,3},
{“无”,4}
};
公共部门有无数的优先事项{
获取{return priorityDictionary.Keys;}
}
既然最终您需要将其作为一个IEnumerable
,为什么不创建一个延迟加载的静态属性,将其作为菜单包含
private static List<SelectListItem> priorities;
public static IEnumerable<SelectListItem> PriorityMenu
{
get
{
if (priorities == null)
{
priorities = new List<SelectListItem>();
foreach (var i in Enum.GetValues(typeof(Priority)))
{
priorities.Add( new SelectListItem
{
Text = Enum.GetName( typeof(Priority), i ),
Value = i.ToString()
});
}
}
return priorities;
}
}
私有静态列表优先级;
公共静态IEnumerable PriorityMenu
{
得到
{
if(优先级==null)
{
优先级=新列表();
foreach(Enum.GetValues中的变量i(typeof(Priority)))
{
优先级。添加(新的SelectListItem
{
Text=Enum.GetName(typeof(Priority),i),
Value=i.ToString()
});
}
}
返回优先事项;
}
}
如果您希望字符串表示形式与Enum.GetName不同,同时仍保持类型安全,请查看:谢谢您的回答。看起来很优雅,我从刚刚看到它中学到了很多。由于我的Enum称为Priorities,我将typeof(Priority)更改为typeof(Priorities)但除此之外,这是获取selectlistitems列表的一个很好的解决方案。我不知道您可以使用枚举类静态方法。我的一个问题是,如何在dropdownlist html帮助程序中使用该列表?它似乎调用了ToString()在列表中的每个项目上,但由于它们是SelectListItem的,所以它只给出了对象的名称。再次感谢。不要介意我试图创建一个selectlist对象作为我的viewmodel类的属性,但是Html。Dropdownlist使用SelectListItem的IEnumerable,而selectlist没有,因此我可以传递上述方法的结果。