在Angularjs中显示枚举字符串

时间:2015-07-15 20:12:21

标签: angularjs entity-framework

我在我的模型中使用ENUM类。我需要在网格中显示相关的字符串。

public enum FileStatus
{
    New = 1,
    Working = 2,
    Competed = 3
}

模特 -

public class FileInformation
{
    [Key]
    public Guid Id { get; set; }
    public String RFQ { get; set; }
    public String FileName { get; set; }
    public String CustomerName { get; set; }
    public FileType FileTypeId { get; set; }
    public FileStatus FileStatusId { get; set; }
    public DateTime DateCreated { get; set; }
    public String CreatedBy { get; set; }
    public DateTime DateModified { get; set; }
    public String ModifiedBy { get; set; }

    public virtual ICollection<FileStatus> FileStatus { get; set; }
    public virtual ICollection<FileType> FileType { get; set; }

    private FileInformation()
    {
        Id = SequentialGuid.Create(SequentialGuidType.SequentialAtEnd);
    }

显示结果的HTML视图 -

<td>{{files.fileStatusId}}</td>

现在表中的输出是1,这是正确的,但我需要显示文本“新”。我需要做些什么才能做到这一点?

2 个答案:

答案 0 :(得分:4)

如果您使用JSON.Net将对象发送到angularjs,那么您只需使用StringEnumConverter将值序列化为字符串而不是int。

[JsonConverter(typeof(StringEnumConverter))]
public FileType FileTypeId { get; set; }

答案 1 :(得分:0)

一种可能的解决方案是让客户端知道 enum类型,方法是在客户端中使用这些枚举。

维护可能听起来乏味且可怕,特别是如果你考虑系统中的所有枚举。它就是!

这就是为什么我建议您查看T4模板,并在您的枚举中使用自定义属性,以自动构建您的枚举并在构建/部署时将其添加到客户端。这样你就不必担心这个。

最后你会得到什么?

您将拥有以下Javascript代码,可帮助您在枚举的文本和值之间切换:

var FileStatus;
(function (FileStatus) {
    FileStatus[FileStatus["New"] = 1] = "New";
    FileStatus[FileStatus["Working"] = 2] = "Working";
    FileStatus[FileStatus["Competed"] = 3] = "Competed";
})(FileStatus || (FileStatus = {}));

这样你得到:

FileStatus[1]; // "New"
FileStatus["New"]; // 1