ASP .NET MVC - 使用枚举作为模型的一部分

时间:2011-02-03 19:54:11

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

(刚刚学习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会创建一个枚举值列表。

1 个答案:

答案 0 :(得分:12)

我的猜测是它无法理解为枚举创建的字段类型。枚举可以绑定到下拉列表,一组单选按钮,文本框等。

你想要什么类型的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; }
}

最后,您可以在View中使用它:

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

这将保存TmRankList中的枚举值。发布表单后,TmRank将保留所选值。

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