Post

معرفی کلاس ValueAttribute

ارسال شده توسط 2013/07/24 در دسته‌بندی نشده توسط admin

قول دادیم که اسمبلی های پر استفاده تولیدی شرکت را به تدریج معرفی کنیم، این موضوع باعث شد نگاهی به کلاس های درون این اسمبلی ها بندازم، خیلی هایشان دیگر کاربرد ندارند، خیلی هایشان اسم جالبی ندارند، خیلی هایشان از ابتدا هم کاربردی نشدند! اما بعضی ها آنچنان پر کاربرد شده اند که نمی شود از آنها جدا شد، یکی از این کلاس ها، کلاس ValueAttribute است.

مشکل:

فرض کنید یک نوع enum تعریف کرده اید که مشخص می کند کاربر آقاست یا خانم؟ به صورت زیر:
[code language="csharp"]
namespace Farayan
{
public enum Genders
{
Male = 1,
Female = 2,
}
}
[/code]

حالا در نظر بگیرید فرمی دارید که در آن کاربر می تواند جنسیتش را مشخص کند، برای این منظور یک DropDownList وجود دارد که به کاربر امکان انتخاب می دهد:

[code language="html"]
<table>
<tr>
<td>جنسیت:</td>
<td>
<asp:DropDownList runat="server" ID="GenderDropDownList">
<asp:ListItem Value="0">آقا</asp:ListItem>
<asp:ListItem Value="1">خانم</asp:ListItem>
</asp:DropDownList>
</td>
</tr>
</table>
[/code]
همانطور که در کد زیر مشخص است، شما باید به ازای هر زبانی که سایت پشتیبانی می کند، فرم جدیدی داشته باشید. همچنین در صورتی که علاوه بر جنسیت زن یا مرد، گزینه جنسیت نامعلوم را اضافه کنید، باید به صورت دستی، کد را تغییر دهید.
برای رفع این مشکل، کلاسی به اسم ValueAttribute درست کرده ایم. این کلاس به صورت یک صفت (Attribute) روی فیلدهای enum قرار می گیرد و علاوه بر اسم فیلد، امکان درج متن برای زبان فارسی و انگلیسی و سایر زبان ها را می دهد. در زیر استفاده این صفت را ببینید
[code lang="csharp"]
namespace Farayan
{
public enum Genders
{
[Value("نا معلوم", "DisplayText", "fa-IR")]
[Value("Unknown", "DisplayText", "en-US")]
Unknown = 0,

[Value("آقا", "DisplayText", "fa-IR")]
[Value("Male", "DisplayText", "en-US")]
Male = 1,

[Value("خانم", "DisplayText", "fa-IR")]
[Value("Female", "DisplayText", "en-US")]
Female = 2,
}
}
[/code]
برروی هر فیلد، دو بار صفت Value اعمال شده است، یک بار برای زبان فارسی و یک بار برای زبان انگلیسی و در هر دو بار، مقداری به اسم DisplayText قرار گرفته است.
عبارت DisplayText به صورت کلید عمل می کند، مثلا این بار به جای استفاده از فرم بالا، به صورت زیر عمل می کنیم:
[code language="csharp"]
<table>
<tr>
<td>جنسیت:</td>
<td>
<Farayan:EnumDropDownList runat="server" ID="GendersEnumDropDownList" EnumType="Farayan.Genders" ValueName="DisplayText" />
</td>
</tr>
</table>
[/code]
برای استفاده از این صفت، چندین ابزار تهیه شده است که عبارتند از:
EnumDropDownList
این ابزار، اسم کلاس enum را می گیرد و مقادیر مشخص شده با کلید ValueName را بسته به زبان جاری به کاربر نشان می دهد
EnumLabel
همانند کلاس EnumDropDownList با گرفتن مقدار و کلید ValueName، متن متناظر را از کد خوانده و نشان می دهد

برای دریافت فایل اسمبلی به نشانی info در farayan.net ایمیل بزنید!

 

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>