ورود

View Full Version : Enum و استفاده از مقادیر فارسی



gama_slv
دوشنبه 26 بهمن 1394, 05:12 صبح
من در مدل برای وضعیت سفارش محصولات


[Display(Name = "وضعیت سفارش")]
public ProductCondition ProductCondition { get; set; }


public enum ProductCondition
{
[Display(Name="بررسی نشده")]
Notchecked,
[Display(Name = "بررسی نشده")]
Confirmed,
[Display(Name = "در حال ارسال")]
senting,
[Display(Name = "ارسال شد")]
Sent,
}



از [Display(Name = "")] برای این استفاده کردم که بتونم enum فارسی داشته باشم ولی مثل اینکه این راه اشتباه.البته در EnumDropDownListFor درستi ولی در جاهای دیگه مقدار اینگلیسی رو نشون میده مثل لیست view index خود mvc.
آیا میشه enum رو با مقادیر فارسی استفاده کرد. یا کلا باید از روش دیگه ای استفاده کرد.

oracle_dba
دوشنبه 26 بهمن 1394, 17:35 عصر
خوب چرا مستقیم اسم فارسی رو نمی نویسی برای enum ؟ من اسم فارسی میذارم مشکلی هم نداره .

gama_slv
چهارشنبه 28 بهمن 1394, 04:51 صبح
در enum نمیشه از دو کلمه با هم استفاده کرد.در اینگلیسی میشه نوشت unread ولی در فارسی "خوانده نشده"امکان پذیر نیست.

hakim22
چهارشنبه 28 بهمن 1394, 05:45 صبح
شما میتوانید از Method Extention برای اینکار استفاده کنید :

یک کلاس جدید تعریف کنید و این متد رو درونش قراربدید.

بعد Namespace اون کلاس رو با using به ویو اضافه کنید .



public static string DisplayName(thisEnum value)
{
Type enumType = value.GetType();
var enumValue =Enum.GetName(enumType, value);
MemberInfo member = enumType.GetMember(enumValue)[0];


var attrs = member.GetCustomAttributes(typeof(DisplayAttribute ),false);
var outString =((DisplayAttribute)attrs[0]).Name;


if(((DisplayAttribute)attrs[0]).ResourceType!=null)
{
outString =((DisplayAttribute)attrs[0]).GetName();
}


return outString;


}





برای استفاده :


@Model.ProductCondition.DisplayName()