ورود

View Full Version : کار نکردن Custom Control انتخابگر تاریخ شمسی در حالت Master Page



meysam_pro
دوشنبه 02 شهریور 1388, 12:15 عصر
سلام
من برای استفاده از یک تقویم فارسی از این کامپوننت (http://www.codeproject.com/KB/custom-controls/PersianDatePicker.aspx)استفاده کردم، مشکل وقتی پیش میاد که از Master Page استفاده میکنم. وقتی که از یک صفحه معمولی استفاده میشه، هیچ مشکلی نداره.
این کامپوننت با JavaScript نوشته شده.
دوستان اگه راه حلی به ذهن شون میرسه دریغ نکنن.

مهدی کرامتی
دوشنبه 02 شهریور 1388, 12:21 عصر
وقتی یک کنترل در Master Page قرار میگیره ID اش عوض میشه. برای اینکه اسکریپت فوق و دیگر اسکریپت های نیازمند به ID کنترل مقصد درست کار کنند میبایست از مشخصه ClientID به جای ID استفاده کنید.

من به پروژه مثال خودش یک Master Page اضافه کردم و کنترل فوق را در Master Page قرار دادم. در DefaultContentPage.aspx به خوبی و بدون مشکل کار میکنه (ضمیمه را ببینید).

farnooshhp
دوشنبه 02 شهریور 1388, 12:40 عصر
خدا شدیدا هر چی میخاید بهتون بده چون من دقیقا همین مشکلو داشتم و خیلی هم دنبال راه حلش گشتم اما ...

meysam_pro
دوشنبه 02 شهریور 1388, 13:38 عصر
وقتی یک کنترل در Master Page قرار میگیره ID اش عوض میشه. برای اینکه اسکریپت فوق و دیگر اسکریپت های نیازمند به ID کنترل مقصد درست کار کنند میبایست از مشخصه ClientID به جای ID استفاده کنید.

من به پروژه مثال خودش یک Master Page اضافه کردم و کنترل فوق را در Master Page قرار دادم. در DefaultContentPage.aspx به خوبی و بدون مشکل کار میکنه (ضمیمه را ببینید).

برنامه نمونه شما رو تست کردم دیدم جواب نداد!! واسه همین رفتم تو IE تستش کردم و دیدم کار میکنه. البته در IE کد خودم هم کار کرد.

شما از چی استفاده کردین؟ فایرفاکس؟
روشی داره که این کد تو فایر فاکس کار کنه؟

مرسی.

مهدی کرامتی
دوشنبه 02 شهریور 1388, 14:45 عصر
اتفاق عجیبی که هنگام قرار دادن این کنترل در Master Page میافته اینه که مقدار مشخصه name با مقدار مشخصه id متفاوت است:

<input id="ctl00_PersianDatePickup2" type="text" name="ctl00$PersianDatePickup2" value="[کلیک کنید]" onclick="displayDatePicker('ctl00_PersianDatePickup2');"/>
این قضیه ظاهرا در IE مشکلی ایجاد نمی کنه، اما در فایرفاکس ایجاد مشکل میکنه.

دلیل مشکل هم اینه که جستجو بر اساس نام کنترل انجام میشه و کنترلی با نام ctl00_PersianDatePickup2 در صفحه پیدا نمیشه، چون نام این کنترل بر اساس اتفاق فوق به ctl00$PersianDatePickup2 تبدیل شده است، بنابراین جستجو بی نتیجه می مونه.

برای رفع مشکل در فایل JsFarsiCalendar.js خط شماره 26 که به این شکل است:

var targetDateField = document.getElementsByName (dateFieldName).item(0);
را به شکل زیر تغییر دهید:

var targetDateField = document.getElementById (dateFieldName);
بدین ترتیب از این ببعد جستجو بر اساس ID کنترل انجام میشه و در هر دو Browser درست کار خواهد کرد.

فایل اصلاح شده را ضمیمه کردم. پروژه ضمیمه شده با Visual Studio 2008 ساخته شده و درست کار میکنه.

ماه رمضان است، دعا برای قبولی طاعات و عبادات فراموش نشود. :چشمک: