如何在Razor中获得Enum值

时间:2017-04-11 06:31:14

标签: javascript c# asp.net-mvc razor

我使用了datatables,我想为指定的int Enum获取variable值。

var client = $('td', row).eq(1).text().trim();

客户端是一种数字数据类型。

我尝试了这个,但它不起作用:

var x=@Enum.GetName(typeof(Client),client);
  

客户端在当前上下文中不存在

提前致谢!

1 个答案:

答案 0 :(得分:4)

@Enum.GetName(typeof(Client), client);是剃刀代码,在发送到视图之前在服务器上解析。 client是一个javascript变量,此时不存在(不在范围内)。

On选项是将enum名称和值的集合传递给客户端,并将其分配给javascript数组,以便可以搜索它。

例如,创建一个表示名称和值的类

public class EnumValues
{
    public int ID { get; set; }
    public string Name { get; set; }
}

并在您的控制器中

IEnumerable<EnumValues> clientValues = 
    from Client c in Enum.GetValues(typeof(Client))
    select new EnumValues
    {
        ID = (int)c,
        Name = c.ToString()
    };

并将其传递给视图模型属性中的视图,或使用ViewBag

ViewBag.ClientValues = clientValues;

在视图中,将其分配给javascript数组,并创建一个函数以返回相应值的名称

var clients = @Html.Raw(Json.Encode(ViewBag.ClientValues));

function getClientName(value)
{
    for(var x = 0; x < clients.length; x++) {
        if (clients[i].ID == value) {
            return clients[i].Name;
        }
    }
    return null;
}

并将其用作

var client = $('td', row).eq(1).text().trim();
var clientName = getClientName(client);