阅读完这篇文章JSON serialization of enum as string后,我仍在寻找一种快速使用Razor javascript这种类型的枚举的方法:
[JsonConverter(typeof(StringEnumConverter))]
public enum StatusReplacement
{
ApprovalPending = 1,
Canceled = 2,
Approved = 3,
AwaitingDelivery = 4,
Delivered = 5,
Completed = 6
}
通过使用JsonConverter 我可以使用元素枚举但不是它们的值。我也试过设置每个元素[EnumMember(Value =“”)]。
预期结果
...Razor...
<script>
var elementValue = @StatusReplacement.ApprovalPending;
alert(elementValue) //Expecting to return 1 instead of ApprovalPending *undefined.
</script>
我不确定我是否真的为此目的使用任何html助手之王。 我怀疑今天使用MVC 4 +有一种更简单的方法来实现它。
此致 鲁
答案 0 :(得分:1)
你可以做几件事。
var elementValue = @Json.Encode(StatusReplacement.ApprovalPending);
执行Json.Encode
会产生小的开销,但是,如果您使用自定义值(例如,将ApprovalPending
的Json值更改为foo
)那么这是您最好的选择。
或者,如果您不打算自定义值,您可以ToString()
var elementValue = @StatusReplacement.ApprovalPending.ToString();
答案 1 :(得分:1)
JSON格式化程序优先考虑数据的输出,并提供枚举值本身的字符串输出:
var data = "@StatusReplacement.ApprovalPending"; // = ApprovalPending
你应该使用
var data = @((int)StatusReplacement.ApprovalPending); // = 1
明确使用int
值。
答案 2 :(得分:1)
最简单的解决方案可能是将您的枚举值转换为Razor代码中的int:
var elementValue = @((int)StatusReplacement.ApprovalPending);
这有点笨拙,但做的工作。 或者,您可以添加一个返回int值的扩展方法:
将以下方法添加到静态类:
public static int EnumValue(this StatusReplacement statusReplacement)
{
return (int)statusReplacement;
}
然后可以从你的剃刀代码中调用它:
var elementValue = @StatusReplacement.ApprovalPending.EnumValue();