2016-11-10 115 views
0

閱讀這篇文章JSON serialization of enum as string我還在尋找一個快速的方法後,把要使用剃刀,這ENUM類型的javascript:使用JsonConverter,枚舉元素的值

[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 +一起工作。

問候, 魯本斯

回答

1

的JSON格式呈現數據的輸出偏好,並提供枚舉值本身的字符串輸出:

var data = "@StatusReplacement.ApprovalPending"; // = ApprovalPending 

您應該使用

var data = @((int)StatusReplacement.ApprovalPending); // = 1 

明確使用int值。

+0

這就是我正在尋找的。非常感謝@ stephen-reindl –

1

有一對夫婦的事情可以做。

var elementValue = @Json.Encode(StatusReplacement.ApprovalPending); 

將會有一個一點更多的開銷做Json.Encode但是,如果你使用自定義的值(例如改變ApprovalPending JSON的值是foo),那麼這就是你最好的選擇。

或者,如果你沒有做自定義值計劃,你可以做ToString()

var elementValue = @StatusReplacement.ApprovalPending.ToString(); 
+0

偉大的做法@cameron特別是你認爲有可能改變枚舉元素成員的描述。你的貢獻非常有用。謝謝。 –

1

最簡單的解決方案可能是隻投你的枚舉值轉換爲一個int在你的剃鬚刀代碼:

var elementValue = @((int)StatusReplacement.ApprovalPending); 

這是一個有點笨拙,但做的工作。 另外,您可以添加返回int值的擴展方法:

添加下面的方法靜態類:

public static int EnumValue(this StatusReplacement statusReplacement) 
{ 
    return (int)statusReplacement; 
} 

這可以再從你的剃鬚刀代碼調用:

var elementValue = @StatusReplacement.ApprovalPending.EnumValue(); 
+0

你說的對@ rune-grimstad我猜最簡單的解決方案是enum。但是,您建議的其他解決方案非常受歡迎,而且易於使用。謝謝。 –