‏نمایش پست‌ها با برچسب Visual Studio. نمایش همه پست‌ها
‏نمایش پست‌ها با برچسب Visual Studio. نمایش همه پست‌ها

Unobtrusive Ajax stopped working after update jQuery to 1.9.1

چند وقت پیش سعی کردم که یکی از پروژه ها رو از  MVC3 به MVC4 ارتقاء بدم. jQuery را هم به نسخه 1.9.1 ارتقاء دادم اما با خطای زیر مواجه شدم:

Error when entering login page:
Unhandled exception at line 115, column 5 in http://localhost:63180/Scripts/jquery.unobtrusive-ajax.js
0x800a01b6 - Microsoft JScript runtime error: Object doesn't support property or method 'live'

البته من متوجه این خطا نشده بودم، چون ازFirefox به عنوان مرورگر پیشفرض استفاده میکردم. ولی وقتی که  Firebug رو فعال کردم، کنسول پیغام زیر رو نشونم داد:

Type Error: a(...).live is not a function
این بود که با IE برنامه رو تست کردم و خطای اول رو گرفتم.

تابع live در نسخه 1.9.1 حذف شده و نمیشه دیگه از اون استفاده کرد. سایت jQuery  درباره این تابع و تابع جایگزین اون یعنی تابع on اینطور گفته:

As of jQuery 1.7, the .live() method is deprecated. Use .on() to attach event handlers. Users of older versions of jQuery should use .delegate() in preference to .live().
This method provides a means to attach delegated event handlers to the document element of a page, which simplifies the use of event handlers when content is dynamically added to a page. See the discussion of direct versus delegated events in the .on() method for more information. 

البته باید بگم که من فقط jQuery  رو به نسخه 1.9.1 ارتقاء داده بودم و jquery.unobtrusive-ajax رو هنوز ارتقاء نداده بودم. :)

برای حل این مشکل هم یا باید تمامی liveها رو به on تغییر میدادم و یا jquery.unobtrusive-ajax را هم ارتقاء میدادم. خوب بهترین راه حل همون آپدیت jquery.unobtrusive-ajax با nuget بود که منو از شر این خطا راحت کرد.

\.Chehre

دردسرهای من و محیط ویژوال استودیو ...

حدود 2سال پیش بود که شروع به برنامه نویسی با سی شارپ کردم. طی این مدت چندین بار شده که محیط ویژوال استودیو (VS IDE) منو غافلگیر کرده که خنده دار هم به نظر میرسه(البته بعضی مواقع دردناک)، که امروز می خوام 2 نمونه از اتفاق ها را اینجا بنویسم:

  • موضوع از این قرار بود که باید یک کلاسی میساختم که توش یک فانکشن استاتیک میداشت. خوب طبق معمول من کلاس رو ساختم، اما به جای اینکه واژه static رو جلوی فانکشن بنویسم، اونو جلوی اسم کلاس نوشتم، به این صورت:static class foo و وقتی که به انتهای خط اومدم و اینتر روزدم که به خط بعد برم، بوم! کل ویژوال استودیو بسته شد :O. باز ویژوال استودیو رو باز کرم و برنامه رو Open کردم و دیدم کلاس سرجاشه و دوبازه static رو جلوش نوشتم و باز هم همون مسئله قبلی تکرار شد!

  • همین 2 هفته پیش بود که داشتم رو Interface یک پروژه کار میکردم. بعد از اینکه کارم تموم شد، پروژه رو ذخیره کردم و اجرا کردم اما هنوز هیچکدوم از تغییرات من اعمال نشده بود. اینجا بود که کل Solution رو Clean کردم و دوباره همه چی رو Build کردم. اما باز هم اتفاق خاصی نیفتاد. بعد از چند دفعه تکرار، به خودم گفتم که شاید اشکال از ویژوال استودیو باشه. برای همین ویژوال استودیو را بستم و دوباره باز کردم و وقتی که پروژه رو باز کردم، دیدم هیچکدوم از تغییراتم سر جاشون نیستن. یعنی پروژه به 2 ساعت پیش برگشته بود! (البته فکر کنم این رفتار VS به این خاطر بود که من از چند COM Object تو برنامم استفاده کردم.)

خطا در اجراي برنامه

چند وقت پيش که مي خواستم يک برنامه اي رو با سي شارپ بنويسم به يک خطا بر خوردم. قضيه از اين قرار بود که من بايد از يک COM در برنامه خودم استفاده مي کردم. و وقتي که شي مربوط به اون COM را روي فرمم قرار ميدادم و برنامه رو اجرا مي کردم با خطاي
Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
مواجه ميشدم. براي مثال اگر مي خواستم از فايل هاي فلش در برنامم استفاده کنم، با خطاي زير مواجه ميشدم.


خوب با اين خطا وقتي مواجه ميشدم که برنامم رو داشتم با Platform پيشفرض ويژوال استوديو يعني Any CPU اجرا مي کردم.
و چون ويندوز من Windows7 64-bit هست با خطا مواجه ميشدم چون ويژوال استوديو مي خواست برنامه من رو در پلتفرم 64 بيت اجرا کنه، در صورتي که من داشتم از COM 32bit در برنامم استفاده مي کردم.
حالا براي اجراي برنامه بايد Platform را به x86 تغيير ميدادم.

براي اطلاعات بيشتر درباره برنامه هاي 64 بيتي ميتونيد به آدرس زير مراجعه کنيد:
http://msdn.microsoft.com/en-us/library/ms241064.aspx

جستجو