در برنامههای وب امروز نیازی به فراخوانی ثوابت که در طول حیات برنامه انگشت شمار تغیر میکنند نیست و با توجه به استفاده از فرامین و متدهای سمت کلاینت احتیاج هست تا این ثوابت بار اول لود صفحه به کلاینت پاس داده شوند.
میتوان در این گونه موارد از قابلیتهای گوناگونی استفاده کرد که در اینجا ما با استفاده از یک فیلد مخفی و json مقدار را به کلاینت پاس میدهیم و در این مثال در سمت کلاینت نیز دراپ دان را با این مقادیر پر میکنیم:
public enum PersistType { Persistable = 1, NotPersist = 2, AlwaysPersist = 3 }
لیست را باید قبل از پر کردن در فیلد مخفی به json بصورت serialize شده تبدیل کرد، برای این منظور از JavaScriptSerializer موجود در اسمبلیهای دات نت در متد زیر استفاده شده:
public static string ConvertEnumToJavascript(Type t) { if (!t.IsEnum) throw new Exception("Type must be an enumeration"); var values = System.Enum.GetValues(t); var dict = new Dictionary<int, string>(); foreach (object obj in values) { string name = System.Enum.GetName(t, obj); dict.Add(Convert.ToInt32(System.Enum.Format(t, obj, "D")), name); } return new JavaScriptSerializer().Serialize(dict); }
با توجه به اینکه در سمت کلاینت مقدار json ذخیره شده در فیلد مخفی را میتوان به صورت آبجکت برخورد کرد پس یک متد در سمت کلاینت این آبجکت را در loop قراد داده و درمتغییری در فایل جاوا اسکریپت نگهداری میکنیم:
var Enum_PersistType = null; function SetEnumTypes() { Enum_PersistType = JSON.parse($('#hfJsonEnum_PersistType').val()); }
و در هر قسمت که نیاز به مقدار enum بود با توجه به ایندکس مقدار را برای نمایش ازاین متغییر بیرون میکشیم:
function GetPersistTypeTitle_Concept(enumId) { return Enum_PersistType[enumId]; }
برای مثال در dropdown در سمت کلاینت این نوع استفاده شده و در حالتی از صفحه فقط برای نمایش عنوان آن احتیاج به دریافت آن از سمت سرور باشد میتوان از این روش کمک گرفت
و یا در سمت javascript میتوان با استفاده از jQuery مقادیر متغییر را در dropdown پر کرد.
function FillDropdown() { $("#ddlPersistType").html(""); $.each(Enum_PersistType, function (key, value) { $("#ddlPersistType").append($("<option></option>").val(key).html(value)); }); }