【问题标题】:How to get an enum value ASP.NET MVC如何获取枚举值 ASP.NET MVC
【发布时间】:2015-02-25 17:14:35
【问题描述】:

我有一个 ProjectsModel 作为视图模型:

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; }
}

我有 Project 作为模型:

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 方法的值。如您所见,从控制器中,我可以获得返回数字的字节类型。我怎样才能达到它的价值?

【问题讨论】:

  • PriorityForProject 的基础类型是int 时,为什么要为TheProjects.Priority 属性使用byte?如果它们是一样的会更干净。
  • 是的,我让它们都一样@JonSkeet 谢谢你

标签: c# asp.net-mvc enums


【解决方案1】:

您必须转换为 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; }

    }

我假设枚举在您的应用程序的核心级别,所以引用一定没有问题。

【讨论】:

  • 是的,你是对的,它们只是应用程序的核心级别。所以正如你所说,我做了 public PriorityForProject Priority { get;放; } 非常感谢 =)
【解决方案2】:

刚投:

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

(不过,我强烈建议您重命名 TheProjects 类型 - 这是一个非常笨拙、单一的名称......)

【讨论】:

  • 嗯,我还在学习。为什么它很笨拙,请您解释一下并引导我编写清晰和惯用的代码。它也有效
  • @Jackal:这就是名称——The 作为名称的一部分毫无意义,而 Projects 在它只是一个项目时很奇怪。老实说,目前还不清楚为什么你有两种Project 类型的表示。
  • 好吧,我称它为 Projects,因为用户将添加很多项目,我称它为 Projects,因为如果我将 Project 用于模型和视图模型,有时它会因为同名而产生错误(我得到了一个几次)。因此,当我需要模型时,我会像 PROJECT 一样使其独一无二,而对于 wiew 模型,我会像 Projects 和 OurProjects 一样将其设为独一无二,然后我可以在查看代码后找到我需要的任何东西,而不会混淆自己
  • @Jackal:如果您需要消除歧义,ProjectViewModel 之类的内容会更有意义。当本身是单数时,将其设为复数只会令人困惑(如果你有很多项目,你会有一个List&lt;Project&gt;或其他什么 - 使用OurThe等只是不可预测的海事组织。
  • 是的,你是对的。但我只是使用它,因为它们都应该是唯一的名称。我会记住你所说的。我应该使用什么来代替 Our 和 The ?
猜你喜欢
  • 2013-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-31
  • 2015-06-16
相关资源
最近更新 更多