【问题标题】:How to get Enum value in Razor如何在 Razor 中获取枚举值
【发布时间】:2017-04-11 06:31:14
【问题描述】:

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

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

client是数字数据类型。

我试过了,但它不起作用:

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

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

提前致谢!

【问题讨论】:

  • 您不能像这样混合使用 javascript 和 c# 代码(一个在客户端运行,一个在您的服务器上运行)
  • 你不能把js和razor混在一起。
  • 我该如何解决这个问题?
  • 您只能在服务器->客户端方向上混合使用 JS 和 C#/Razor。也就是说,服务器端值可以在响应发送到浏览器时设置一次在浏览器看到它之前
  • 您可以使用 ajax 将值发布到服务器并返回文本值。或者您可以将集合/字典或枚举 intname 值传递给视图并将其转换为 javascript 数组并在该数组中搜索相应的值。

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


【解决方案1】:

@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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    相关资源
    最近更新 更多