【问题标题】:ASP .NET MVC - Using a enum as part of the modelASP .NET MVC - 使用枚举作为模型的一部分
【发布时间】:2011-06-20 22:20:21
【问题描述】:

(刚学MVC)

我已经创建了一个模型类:

public class Employee
    {
        public int ID { get; set; }

        [Required(ErrorMessage="TM Number is Required")]
        public string tm_number { get; set; }

        //use enum?
        public tmRank tm_rank { get; set; }
    }

模型类引用枚举'tmRank':

public enum tmRank
    {
        Hourly, Salary
    }

当我从这个模型创建视图时,'tm_rank' 字段没有出现?我希望 MVC 会创建一个枚举值列表。

【问题讨论】:

  • 您现在的视图是什么样的?你用的是EditorFor()还是别的什么?

标签: asp.net-mvc asp.net-mvc-3 enums models


【解决方案1】:

我的猜测是它不明白为枚举创建什么类型的字段。一个 Enum 可以绑定到一个下拉列表、一组单选按钮、一个文本框等。

您希望 Enum 的条目类型是什么?他们应该从列表中选择它吗?回答这个问题可以帮助我们处理这种情况所需的代码。

根据您的评论编辑添加代码:

public static SelectList GetRankSelectList()
{

    var enumValues = Enum.GetValues(typeof(TmRank)).Cast<TmRank>().Select(e => new { Value = e.ToString(), Text = e.ToString() }).ToList();

    return new SelectList(enumValues, "Value", "Text", "");
}

然后在你的模型中:

public class Employee
{
    public Employee() 
    { 
        TmRankList = GetRankSelectList();
    }

    public SelectList TmRankList { get; set; }
    public TmRank TmRank { get; set; }
}

最后你可以在你的视图中使用它:

<%= Html.DropDownListFor(c => c.TmRank, Model.TmRankList) %>

这将保存 TmRankList 中的枚举值。当您的表单发布时,TmRank 将保存选定的值。

我在没有 Visual Studio 的情况下编写了这个,所以可能会有问题。但这是我用来解决它的一般方法。

【讨论】:

  • 你是对的 - 我希望让用户从列表中选择。
  • 有没有办法获取标签而不是下拉列表的值?
  • 是的,您可以省略选择列表,因为实际上没有带有标签的列表的概念。只需做 Html.LabelFor(c => c.Property)
  • 一个错字/错误,我认为应该是 TmRankList = GetRankSelectList()。否则效果很好。
猜你喜欢
  • 2021-04-22
  • 2012-12-26
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多