【问题标题】:Enum to List<Object> (Id, Name)枚举到 List<Object> (Id, Name)
【发布时间】:2016-08-31 14:04:58
【问题描述】:

enum 转换为 Id/Name-objects 列表的最佳做法是什么?

Enum:

public enum Type
{
    Type1= 1,
    Type2= 2,
    Type3= 3,
    Type4= 4
}

Object:

public class TypeViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
}

类似:

var typeList = new List<TypeViewModel>();
foreach (Type type in Enum.GetValues(typeof(Type)))
{
    typeList.Add(new TypeViewModel(type.Id, type.Name));
}

【问题讨论】:

  • 你这样做的目的是什么?
  • 我想在我的 MVC Razor-View 中使用它,如下所示:@Html.DropDownListFor(model => model.TypeId, new SelectList(Model.AllTypes, "Id", "Name") )
  • 你可以使用:@Html.EnumDropDownListFor(m => m.EnumProp)

标签: c# asp.net-mvc linq enums


【解决方案1】:

使用LINQ:

var typeList = Enum.GetValues(typeof(Type))
               .Cast<Type>()
               .Select(t => new TypeViewModel
               {
                   Id = ((int)t),
                   Name = t.ToString()
               });

结果:

【讨论】:

    【解决方案2】:

    假设我们有:

    public enum Gender
    {
       Male = 0,
       Female = 1
    }
    

    还有型号:

    public class Person 
    {
       public int Id {get; set;}
       public string FullName {get; set;}
       public Gender Gender {get; set;}
    }
    

    在视图中你可以简单地使用:

    @model YourNameSpaceWhereModelsAre.Person;
    
    ... 
    
    @Html.BeginForm(...)
    {
       @Html.HiddenFor(model => model.Id);
       @Html.EditorFor(model => model.FullName);
       @Html.EnumDropDownListFor(m => Model.Gender);
    
       <input type="submit"/>
    }
    

    更多信息您可以找到或MSDN

    【讨论】:

    • 所选性别如何发布?
    • 好吧,你真的不需要考虑它,这就是辅助方法的魔力所在。只需将模型发送到查看其属性之一是枚举的位置,在表单中使用 EnumDropDownListFor() 将模型返回并提交给控制器的 Post 方法并使用模型。
    • 我接受了 S.Akbari 的回答,因为我要求提供一份清单,但在我的情况下,您的方式似乎是更好的方式。
    • 好吧,如果您使用的是旧版本的 Asp.Net MVC,那么 Abari 的答案是唯一可行的方法,但在新版本中,我喜欢我们可以使用的这种“神奇”辅助方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    相关资源
    最近更新 更多