Converting C# Enums to JavaScript
Ever needed to make some enums in C# available to some JavaScript? In this post, we take a look at a solution to doing just that!
Join the DZone community and get the full member experience.
Join For FreeIn one of my projects, I needed some enums defined in C# to also be usable in my JavaScript code. After some quick research on the internet, I came up with a simple and easy extension method to convert C# enums to JavaScript. Here it is.
Let’s get started with an example enum and suppose we want to be able to also use it with JavaScript.
public enum AssetStatusEnum
{
Free,
Reserved,
Inactive,
UnderMaintenance
}
To make enum available in JavaScript, we have to convert it to JSON. As Enum.GetValues() returns Array and Array doesn’t have LINQ extensions available, we have to cast an array to IEnumerable<int> before converting it to a dictionary. We need a dictionary because the JSON converter that comes with the popular NewtonSoft JSON package will serialize it to a JavaScript array.
Here is the extension method for HtmlHelper and this method returns enum as JavaScript object string.
public static class HtmlEnumExtensions
{
public static MvcHtmlString EnumToString<T>(this HtmlHelper helper)
{
var values = Enum.GetValues(typeof(T)).Cast<int>();
var enumDictionary = values.ToDictionary(value => Enum.GetName(typeof(T), value)); return new MvcHtmlString(JsonConvert.SerializeObject(enumDictionary));
}
}
This is how we call our extension method in views.
<script>
var assetStatusEnum = @(Html.EnumToString<AssetStatusEnum>())
</script>
And this is the result of converting our AssetStatusEnum to JavaScript.
<script>
var assetStatusEnum = {"Free":0,"Reserved":1,"Inactive":2,"UnderMaintenance":3}
</script>
Our extension method has the following benefits:
- Simple and easy to debug code.
- No more manually duplicated enums in JavaScript.
- Enums in JavaScript are always up to date.
Published at DZone with permission of Gunnar Peipman, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments