نوشته شده توسط
سعید کشاورز
سلام دوستان..سوال اولم اینه
1) چجوری میشه enum رو تبدیل به Dropdown list کرد که مقداری که توی دیتابیس میشینه عدد باشه و مقداری که به کاربر نمایش داده میشه ( هنگام انتخاب از لیست) متن فارسی باشه؟
مثلا فرض کنید کاربر داره یه فرم پر میکنه که باید نوع دوربین های مدار بسته رو مشخص کنه.. حالا ما هم 4 تا نوع بیشتر نداریم که به صورت استاتیک هست.میخوام Value این Dropdown عدد باشه و مقداری نمایشی اون به کاربر متن فارسی باشه.
2) حالا فرض کنیم کار بالارو انجام دادیم و یه فیلد به اسم Type داخل دیتابیس داریم از نوع int که توش مثلا 1و2و3و4 ذخیره شده. چجوری میشه به جای اعداد به کاربر پیام مناسب نشون بدیم؟ من اومدم یه تابع تعریف کردم که بهش عدد میدی و با دستور سویچ میاد رشته مناسب رو بر میگردونه..حالا من اینجا اگه 1000 تا نوع داشته باشم یعنی باید هزار خط کد بنویسم؟ خب منطقی نیست این قضیه..
سوال دومم هم میتونه ربطی به سوال اول نداشته باشه..می خوام بدونم بهترین راه چیه برای سوال دوم
اول یک enum ایجاد کنید مانند زیر
public enum ContentType
{
[Display(Name ="متن اول")]
content1 = 0,
[Display(Name ="متن دوم")]
content2 = 1,
}
این هم dropdown :
@Html.EnumDropDownListFor(model => model.contentType, new { @class = "form-control select2" })
با این کلاس می تونید مقدار displayname enum رو به کاربر نشون بدید
public static class EnumExtensions
{
/// <summary>
/// Retrieves the <see cref="DisplayAttribute.Name" /> property on the <see cref="DisplayAttribute" />
/// of the current enum value, or the enum's member name if the <see cref="DisplayAttribute" /> is not present.
/// </summary>
/// <param name="val">This enum member to get the name for.</param>
/// <returns>The <see cref="DisplayAttribute.Name" /> property on the <see cref="DisplayAttribute" /> attribute, if present.</returns>
public static string GetDisplayName(this Enum val)
{
return val.GetType()
.GetMember(val.ToString())
.FirstOrDefault()
?.GetCustomAttribute<DisplayAttribute>(false)
?.Name
?? val.ToString();
}
}
کافیه نام متد رو صدا بزنید مانند :
ContentType.content1.GetDisplayName)(