ASP .NET MVC - Использование перечисления как части модели - PullRequest
10 голосов
/ 03 февраля 2011

(только что изучил 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 Ответ

12 голосов
/ 03 февраля 2011

Полагаю, он не понимает, какой тип поля создать для Enum. 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; }
}

И, наконец, вы можете использовать его в своем View с:

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

Это будет содержать значения перечисления в TmRankList. Когда ваша форма будет опубликована, TmRank будет хранить выбранное значение.

Я написал это без визуальной студии, так что могут быть проблемы. Но это общий подход, который я использую для его решения.

...