gpt4 book ai didi

javascript - 在 MVC Razor 中的 C# 和 Javascript 之间共享枚举

转载 作者:可可西里 更新时间:2023-11-01 01:48:14 25 4
gpt4 key购买 nike

我已经看到这个有用的答案,用于将常量添加到 javascript 文件中以便它可以与 razor View 一起使用:Share constants between C# and Javascript in MVC Razor

除了定义枚举外,我希望能够做同样的事情,但我不确定如何将 C# 枚举转换为 javascript 中的常量。

在 GetType() 之外,似乎没有实际获取常量值的方法。

最佳答案

我综合了几个人的答案,写了这个 HtmlHelper 扩展方法:

public static HtmlString GetEnums<T>(this HtmlHelper helper) where T : struct
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.AppendLine("<script type=\"text/javascript\">");
sb.AppendLine("if(!window.Enum) Enum = {};");
var enumeration = Activator.CreateInstance(typeof(T));
var enums = typeof(T).GetFields().ToDictionary(x => x.Name, x => x.GetValue(enumeration));
sb.AppendLine("Enum." + typeof(T).Name + " = " + System.Web.Helpers.Json.Encode(enums) + " ;");
sb.AppendLine("</script>");
return new HtmlString(sb.ToString());
}

然后您可以使用 Razor 语法调用该方法,如下所示: @(Html.GetEnums<Common.Enums.DecisionStatusEnum>())

然后它将像这样吐出 javascript:

<script type="text/javascript">
if(!window.Enum) Enum = {};
Enum.WorkflowStatus = {"value__":0,"DataEntry":1,"SystemDecisionMade":2,"FinalDecisionMade":3,"ContractCreated":4,"Complete":5} ;
</script>

然后,您可以像这样在 javascript 中使用它:
if(value == Enum.DecisionStatusEnum.Complete)

由于在顶部检查属性 ( if(!window.Enum) ),这允许您为多个枚举调用它并且它不会覆盖 global Enum变量,只是附加到它。

关于javascript - 在 MVC Razor 中的 C# 和 Javascript 之间共享枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8345355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com