2016-12-06 67 views
0

我有一个使用mvc c#和typescript代码的web应用程序,我有一个C#枚举和描述。如何从一个typescript 1.8代码迭代C#枚举描述属性

MyEnum 
{ 
    [First Value] FirstValue, 
    [Second Value] SecondValue 
} 

我需要重复的是C#枚举,并得到说明添加到打字稿一个阵列 - 我怎样才能做到这一点?

编辑 既然我在工作中,我可以发布完整的代码 - 我的问题与打字稿有关。

命名空间作业{

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using Serenity.ComponentModel; 
using System.ComponentModel; 


[EnumKey("Order.Status")] 
public enum Status 
{ 
    [Description("Order Active")] 
    OrderActive = 1, 
    [Description("Order Complete")] 
    OrderComplete = 2 
} 

}

如何重复上述打字稿枚举?

打字稿代码如下:

export class OrderStatusEditor extends Serenity.Select2Editor<any, any> { 

    private OrderStatusList: string[]; 
    private statName: Status; 

    constructor(container: JQuery) { 
     super(container, null); 

    // Iterate the C# Enum Status 
    for (var key in statName) 
    this.addOption("key1", "Text 1"); 

} 

在上面的 “文本1” 是枚举状态 Description属性 “命令激活”,而不是Status.OrderActive。

+0

你不能做到这一点香草JavaScript,因此你不能这样做它在TypeScript中。您必须在服务器上收集描述并将它们发送给客户端。你如何去做这取决于你。 – krillgar

+0

@krillgar - 这就是为什么我有一个打字稿标签,并特别要求如何在打字稿中做到这一点。请查看我正在尝试执行此操作的代码示例。 – Ken

+1

这就是我要说的。当您处于TypeScript代码中时,您无权访问服务器端代码。你的TypeScript变成了香草JavaScript,它在浏览器中执行。这段代码没有任何线索,也不关心在服务器上执行什么代码,更不用说它使用的是什么语言。就像我说的,你需要在C#中完成这些工作,并将值发送到TypeScript。你无法在那里找到那些信息。 – krillgar

回答

0

您应该更新您的代码片段,以便它是有效的C#。从你的代码中获取一个真实的例子。还举例说明你想要数组的内容,基于示例枚举。

这听起来像是一份Reflection的工作。您可以获取枚举的Type对象,然后发现您需要了解的所有内容,并生成数据以返回到您的客户端(可能在本例中为JSON数组)。

+0

我在工作,所以我发布了一个真实的例子。 c#方面不是我所需要的 - 我以前从未使用过的打字稿是我需要代码来迭代它的地方。 – Ken

+0

在你的TS代码中说:'private statName:Status;' - Status的声明是什么样的?它必须在TS中。你是用手写的还是用C#自动生成的? –

+0

多数民众赞成我的代码写作试图找出这种打字机如何工作,看看我怎么能从真正的枚举得到属性描述..。 – Ken

0

使用反射。希望这可以帮助。你的问题不具有打字稿的关系,取下吊牌,请

 private static string GetEnumDescription<TEnum>(TEnum item, string enumName) where TEnum: struct 
     { 
      Type type = item.GetType(); 

      var attribute = 
       type.GetField(item.ToString()) 
        .GetCustomAttributes(typeof (DescriptionAttribute), false) 
        .Cast<DescriptionAttribute>() 
        .FirstOrDefault(); 

      return attribute == null 
       ? enumName 
        .FirstCharToUpper() 
        .ToSeparatedWords() 
       : attribute.Description; 
     } 

而且方式来使用它

var eType = typeof (TEnum); 

foreach (TEnum eValue in Enum.GetValues(eType)) 
{ 
    var name = Enum.GetName(eType, eValue); 
    var descp = GetEnumDescription(eValue, name); 
} 
+0

请看这个问题的更新 - 你可以看到与打字稿的相关性与代码,我显示打字稿代码文件,我试图做到这一点。我需要在打字稿中迭代它。 – Ken