I use this in my own projects.enum value, enum name, enum description, in array format.It offers a lot of freedom when using
cs side. Manoj Choudhari you contributed ideas to me thank you
public enum DayOfWeekTR
{
[Description("Pazar")]
pzr = 0,
[Description("Pazartesi")]
pzts = 1,
[Description("Salı")]
sali = 2,
[Description("Çarşamba")]
car = 3,
[Description("Perşembe")]
per = 4,
[Description("Cuma")]
cuma = 5,
[Description("Cumartesi")]
cmrts = 6
}
public enum DepoTipi { ana = 1, sube = 2, uretim = 3 }
public class WebTools {
public static object EnumIslems<T>() where T : struct, IConvertible
{
IDictionary<string, object> ret = new ExpandoObject();
var t = typeof(T);
var vs = Enum.GetValues(t);
ret["Enum"] = vs.Cast<int>().ToDictionary(x => Enum.GetName(t, x));
if (t.GetFields().Any(x => x.GetCustomAttributes(typeof(DescriptionAttribute), false).Any()))
{
ret["Array"] = ((T[])vs).Select(x => new
{
vl = Convert.ToInt32(x),
tx = x.GetDescription()
}).ToArray();
}
return ret;
}
}
public static class WebExtensions {
public static string GetDescription<T>(this T value, string defaultvalue = "") where T : struct, IConvertible
{
var type = typeof(T);
if (type.IsEnum)
{
var name = Enum.GetName(type, value);
if (name.IsNullEmpty()) { return defaultvalue; }
else
{
var customAttribute = type.GetField(name).GetCustomAttributes(typeof(DescriptionAttribute), false);
return (customAttribute.Length > 0 ? ((DescriptionAttribute)customAttribute[0]).Description : name);
}
}
else { throw Genel.NotImplementedExceptionWarning<T>(); }
}
public static MvcHtmlString Enums(this HtmlHelper html)
{
IDictionary<string, object> ret = new ExpandoObject();
foreach (var item in new Type[] { typeof(DayOfWeekTR), typeof(DepoTipi) }) { ret[item.Name] = typeof(WebTools).GetMethod(nameof(WebTools.EnumIslems)).MakeGenericMethod(item).Invoke(null, null); }
return MvcHtmlString.Create(JsonConvert.SerializeObject(ret));
}
}
.cshtml(I usually place it in the main layout under the head tag) side
<script type="text/javascript">
var _enums = @Html.Raw(Html.Enums());
/*
var _enums = { "DayOfWeekTR": { "Enum": { "pzr": 0, "pzts": 1, "sali": 2, "car": 3, "per": 4, "cuma": 5, "cmrts": 6 }, "Array": [{ "vl": 0, "tx": "Pazar" }, { "vl": 1, "tx": "Pazartesi" }, { "vl": 2, "tx": "Salı" }, { "vl": 3, "tx": "Çarşamba" }, { "vl": 4, "tx": "Perşembe" }, { "vl": 5, "tx": "Cuma" }, { "vl": 6, "tx": "Cumartesi" }] }, "DepoTipi": { "Enum": { "ana": 1, "sube": 2, "uretim": 3 } } }; the result should be like this! */
(function () {
let ob, rt, t = this;
$.each(Object.keys(t), function (index, vs) {
if (typeof t[vs].Desc !== 'function') {
t[vs].Desc = function (vl, tp) {
if (typeof t[vs].Array !== 'object' || (typeof tp === 'boolean' && !tp)) {
rt = '';
for (ob in t[vs].Enum) {
if (t[vs].Enum[ob] === vl) {
rt = ob;
break;
}
}
return rt;
}
else { return (t[vs].Array.find(x => x.vl === vl) || { tx: '' }).tx; }
};
}
});
}).call(_enums);
</script>
examples
<script type="text/javascript">
var vl = _enums.DayOfWeekTR.Enum.pzr; //result 0;
var array = _enums.DayOfWeekTR.Array;
var desc = _enums.DayOfWeekTR.Desc(2); // result: 'Salı' if it returned description value
var tx = _enums.DayOfWeekTR.Desc(2, false) // result: 'sali' enum name
</script>