2015-02-25 2 views
1

У меня есть ProjectsModel как ViewModel:Как получить значение перечисления ASP.NET MVC

public IEnumerable<TheProjects> OurProjects { get; set; } 

public class TheProjects 
{ 
    public int Id { get; set; } 

    public string ProjectName { get; set; } 
    public short PhaseCount { get; set; } 
    public string ProjectOwner { get; set; } 
    public byte Priority { get; set; } 
} 

И у меня есть проект в качестве модели:

public enum PriorityForProject 
{ 
    Acil = 0, 
    Normal = 1, 
    Düsük = 2 
} 

namespace JobTracking.Models 
{ 
    public class Project 
    { 
     public int Id { get; set; } 
     public string ProjectName { get; set; } 
     public int ProjectNo { get; set; } 
     public string ProjectType { get; set; } 
     public string ProjectOwner { get; set; } 
     public string StartDate { get; set; } 
     public string EndDate { get; set; } 
     public string ProjectManager { get; set; } 
     public string Team { get; set; } 
     public string ProjectDescription { get; set; } 
     public PriorityForProject Priority { get; set; } 
     public string Costs { get; set; } 
     public string CashExpenditures { get; set; } 
     public short Sira { get; set; } 
    } 
} 

Как вы видите, у меня есть перечисление в моем project.cs и вот мой контроллер:

public ActionResult Index(int S = 1) 
{ 
    var itemsPerPage = 100; 
    var model = new ProjectsModel 
    { 
     ItemsPerPage = itemsPerPage, 
     Page = S, 
     TotalItems = Db.MyProjects.Count(), 
     OurProjects = Db.MyProjects.OrderByDescending(o => o.Sira).Skip((S - 1) * itemsPerPage).Take(itemsPerPage) 
     .Select(s => new ProjectsModel.TheProjects 
     { 
      Id = s.Id, 
      ProjectName = s.ProjectName, 
      PhaseCount = (short)Db.MyPhases.Where(p => p.Project.Id == s.Id).Count(), 
      ProjectOwner=s.ProjectOwner, 
      Priority = (byte)s.Priority 
     }) 
    }; 
    return View(model); 
} 

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

+2

Почему вы используете 'byte' для свойства' TheProjects.Priority', когда базовый тип 'PriorityForProject' является' int'? Было бы чище, если бы они были одинаковыми. –

+0

да я сделал их все то же @JonSkeet спасибо – Jackal

ответ

3

Вы должны приводиться к типу propertyforproject (PriorityForProject).

Если вы не хотите беспокоиться о значениях, вы можете объявить свойство PropertyForProject в своей модели.

public class TheProjects 
    { 
     public int Id { get; set; } 
     public string ProjectName { get; set; } 
     public short PhaseCount { get; set; } 
     public string ProjectOwner { get; set; } 
     public byte PriorityValue { get; set; } /* check if you really need this */ 
     public PriorityForProject Priority { get; set; } 

    } 

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

+0

спасибо, что это сработало – Jackal

+0

yes Вы правы они просто базовый уровень приложения. Итак, как вы сказали, я сделал публичный приоритет PriorityForProject Priority {get; set;} Большое вам спасибо =) – Jackal

3

Просто ролях:

TheProjects x = ...; 
PriorityForProject priority = (PriorityForProject) x.Priority; 

(я настоятельно советую вам переименовать TheProjects тип, хотя - это очень громоздко, unidiomatic имя ...)

+0

хорошо я все еще учусь. Почему это громоздко, не могли бы вы объяснить больше и привести меня к написанию четкого и идиоматического кода. Также он работал – Jackal

+0

@Jackal: Это имя - 'The' бессмысленно как часть имени, а' Projects' является нечетным, когда это всего лишь один проект. Непонятно, почему у вас есть два представления типа «Проект», если честно. –

+0

Я назвал его Project, потому что пользователь будет добавлять много проектов, и я назвал его Project, потому что, если я использую Project для модели и viewmodel, иногда он создает ошибку из-за того же имени (я получил это несколько раз). Поэтому, когда я нужна модель, я делаю ее уникальной, как PROJECT, и для моделей wiew я делаю это как Projects и OurProjects, тогда я могу найти все, что мне нужно, не запутывая себя после того, как я посмотрю код – Jackal

Смежные вопросы