آی تی نرد

اشتراک اطلاعات و تجربیات در زمینه ی توسعه ی دات نت و البته شیرپوینت

تاریخ و زمان شمسی در MVC بدون نیاز به استفاده از تمپلیت

shamsi datetime

حل مشکل تاریخ و زمان شمسی در اکثر پروژه های نرم افزاری که کار میکنیم یک کار مازاد به شمار میاد که باید در گوشه ای از ذهنمون در نظر داشته باشیم و معمولا هم در انتهای پروژه نسبت به رفع اون اقدام میکنیم. البته هر کسی روشی داره و بالاخره این مشکل رو حل میکنه. خود من یادم هست که حدود 8 الی 9 سال پیش قسمت های سال و ماه و روز تاریخ شمسی رو به صورت عددی کنار هم میچسبوندم و توی جدول نگهداری میکردم که البته کار اشتباهی بود.

بهترین روش این هست که هر مقداری معادل کاربردش در سیستم و با نوع متناسب نگهداری بشه و مقادیر در زمان و لایه ی نمایش تغییر کنند. به هر حال مثلا وقتی میگیم تاریخ تولد، نوعش هم باید تاریخ باشه.

توی پروژه های MVC معمولا برای حل این مسئله یک تمپلیت برای نمایش و یکی هم برای ویرایش(که در نهایت مقدار به سرور ارسال میشود) استفاده می کنیم که در تمپلیت نمایش(DisplayTemplate) تاریخ رو تبدیل میکنیم و بعد نشون میدیم و در ویرایش(EditorTemplate) هم به همین صورت اما فقط مقدار میلادی رو توی یک فیلد مخفی نگهداری میکنیم و بعد در زمان Submit اون مقدار رو ارسال میکنیم. خود این کارها واقعا وقت گیر، حوصله بر، دست و پاگیر و اضافی هست، البته در نهایت برای انتخاب تاریخ مجبوریم از یک DatePicker در EditorTemplate استفاده کنیم ولی همانطور که در ادامه میخونید دیگر نگرانی تبدیل اون از شمسی به میلادی رو در سمت کلاینت رو نخواهیم داشت.

به نظر من بهترین کار این هست که تمامی این تبدیل ها رو به قسمتی از سیستم بدیم و بزاریم خودش تشخیص بده و مدیریت کنه و ما هم این مشغله رو از ذهنمون دور بندازیم.

توی یکی از مطالبم مقدمه ای در مورد کالچر در Asp.net Web form و سیستم Blogengine نوشتم که از همون استراتژی هم میشه توی MVC استفاده کرد به هر حال هر دو زیرساخت Asp.net رو دارند اما فقط نحوه ی پیاده سازی برخی ساختارهای زیرین در دو تکنولوژی متفاوت هست.

بیشتر...

تاریخ و تقویم شمسی برای BlogEngine - Frontend

اصولا می بایست با تغییر فرهنگ(Culture) یک برنامه ی Asp.net که در زمان تغییر زبان برنامه صورت میگیرد، تمام محیط برنامه که از این فرهنگ پشتیبانی میکند به فرهنگ مورد نظر تغییر یابد.

بنابراین برنامه ای مانند بلاگ انجین هم از این قاعده مستثنا نیست، بنابراین با تغییر زبان یا فرهنگ برنامه محیط هم به فرهنگ مورد نظر تغییر خواهد کرد البته به جز تاریخ برنامه که همان میلادی باقی خواهند ماند.

این هم به این دلیل هست که کلاس PersianCalendar ی که مایکروسافت به صورت پیشفرض در دات نت قرار داده دچار مشکل هست یا به هر حال کامل نیست به همین دلیل با فیکس کردن این کلاس و اختصاص آن به فرهنگ fa-ir این مشکل یا ضعف برطرف خواهد شد.

از این رو برای حل مشکل تاریخ و تقویم شمسی در بلاگ انجین به صورت زیر عمل کنید:

ابتدا کلاس PersianCulture رو از انتهای پست دانلود کنید. بعد اون رو به پروژه ی وب و در پوشه ی برای مثال app_code اضافه کنید.

در مرحله ی بعد هم کلاس site.master.cs مربوط به تم مورد نظرتان را باز کرده و دو خط کد زیر رو به قسمت لود صفحه اضافه کنید(این کد چک میکنه که اگر فرهنگ برنامه به فارسی تغییر کرده، فرهنگ به همراه تاریخ اصلاح شده رو با فرهنگ جاری جایگزین میکنه):

بیشتر...