‫معرفی کتاب ASP.NET AJAX in Action

حدود ۳ ماه بود که برای آژاکسی کردن یک Web Application نسبتاً بزرگ (با حدود ۳۰۰ صفحه aspx) در حال بررسی راه حل‌های مختلف بودم. بعد از آن که تصمیم گرفتم مابین jQuery و ASP.NET AJAX از ASP.NET AJAX استفاده کنم شروع به یادگیری ASP.NET AJAX کردم. اما بعد از مدتی دیدم بهتر است به جای خواندن مقالات متعدد، یک کتاب خوب پیدا کرده و از روی آن یاد بگیرم. بعد از کمی جستجو سه تا کتاب مناسب پیدا کردم و از بین آن سه کتاب نیز نهایتاً کتاب ASP.Net Ajax in Action را برای مطالعه انتخاب کردم. در ادامه نظرات من را راجع به این کتاب با توجه به این نکات که الف- قرار نیست من کنترل نویسی کنم، ب- تمرکز عمده من باید بر Server Centric باشد نه Client Centric، ج- باید از راه حل‌هایی استفاده کنم که هزینه نگهداری کمتری داشته باشد، د- محیط استفاده Application ما یک محیط اینترانت بدون محدودیت سرعت و کاربران ثابت و همیشگی خیلی معمولی است، می‌خوانید.

این کتاب به دلیل تکرار و مرور مناسب مطالب یادگیری خیلی خوبی دارد و شامل ۱۳ فصل است:
فصل اول: مقدمه‌ای بر فناوری Ajax و ASP.NET Ajax: تقریبا همه برنامه‌نویسان وب به مطالب این فصل اشراف دارند.
فصل دوم: معرفی کتابخانه جاوا اسکریپتی Microsoft Ajax Library: این کتابخانه هم در نوشتن کدهای جاوا اسکریپت بدون در نظر گرفتن آژاکس و ASP.NET مفید است و هم در بحث آژاکس در ASP.NET AJAX. خواندن این فصل به عنوان یک بخش پایه اجباری است.
فصل سوم: یادگیری موثرتر جاوا اسکریپت بر پایه کتابخانه Microsoft Ajax Library: این فصل به شما یاد می‌دهد که چطور با کمک کتابخانه فوق الذکر در جاوا اسکریپت، class، interface، inheritance، enum و… را پیاده سازی کنید. این فصل چه برای آنها که می‌خواهند در فضای client فعال باشند و client centric کار کنند و چه برای آنها که فقط می‌خواهند از UpdatePanel و AjaxControlToolkit کار کنند خیلی ضروری بوده و حتماً باید مطالعه گردد.
فصل چهارم: مروری بر امکانات سمت سرور ASP.NET AJAX: مطالب این فصل که عمدتاً شامل استفاده از UpdatePanel و ScriptManager است را تقریباً همه بلد هستند. در نتیجه نیازی به مطالعه دقیق ندارد.
فصل پنجم: رد و بدل کردن اطلاعات با سرور به طور ناهمزمان از طریق جاوا اسکریپت: مطالعه این فصل دید خیلی خوبی راجع به کار شبکه‌ای می‌دهد. در این فصل نحوه کار با «وب سرویس»ها به طور ناهمزمان (آسنکرون) از طریق جاوا اسکریپت گفته شده که می‌تواند ابزار خیلی راحت و خوبی برای کارهای ساده با سرور باشد.
فصل ششم: کار با UpdatePanel: هر چند این فصل خیلی روی UpdatePanel عمیق نمی‌شود ولی خواندن آن برای یادگیری جزییات کار با UpdatePanel اجباری است.
فصل هفتم: کار با UpdatePanel به طور خیلی تخصصی!: مطالعه و تمرین این فصل به آدم‌های مثل خودم که تمرکزشان روی کنترل‌های سروری است و ترجیح می‌دهند صرفاً از ScriptManager، UpdatePanel و کنترل‌های AjaxControlToolkit است شدیداً توصیه می‌شود.
فصل هشتم و نهم: این دو فصل به مطالعه و بررسی مباحث توسعه Client Centric می‌پردازند و برای افراد علاقه‌مند به Server Centric مثل خودم غیر ضروری هستند.
فصل دهم: Ajax Control Toolkit: مروری مختصر بر Ajax Control Toolkit با تاکید بر مفاهیم Clientی و نحوه توسعه کنترل‌های مربوطه. برای علاقه‌مندان Server Centric بررسی مستقیم خود کنترل‌های Ajax Control Toolkit خیلی مفیدتر است.
فصل یازدهم: XML Script: این فناوری در نسخه‌های اخیر ASP.NET AJAX حذف شده و دیگر ارزش یادگیری ندارد.
فصل دوازدهم: Drag N Drop: چون به آن نیازی نداشتم اصلاً مطالعه نکردم ولی مطمئناً برای افراد علاقه‌مند به درد بخور خواهد بود.
فصل سیزدهم: تمرین آنچه که در ۱۲ فصل گذشته مطالعه شده است. اما چون بیشتر مبتنی بر client بود آن را مطالعه نکردم.
پیوست‌ها، منابع و ایندکس: مطابق هر کتاب دیگری، این سه بخش در خواندن و درک بهتر مطالب کمک خوبی محسوب می‌شوند.

مطالعه بیشتر:
۱- پیوند کتاب در سایت آمازون
۲- پیوند کتاب در سایت ناشر
۳- آشنایی با کتابخانه Microsoft Ajax Library
۴- جاوا اسکریپتی قوی‌تر با Microsoft Ajax Library
۵- ‫فراخوانی Web Service از Client Side
۶- ‫نکاتی تخصصی درباره‌ی UpdatePanel
۷- ‫‫آیا واقعاً بهتر است به جای ASP.NET AJAX از jQuery استفاده کنیم؟
۸- ‫یادگیری ASP.NET AJAX
۹- به روز رسانی صفحات آژاکسی از سمت سرور

‫نکاتی تخصصی درباره‌ی UpdatePanel

سرعت بیشتر با آژاکس!! اگر تا حالا سعی کرده باشید با ASP.NET AJAX (راه حل مایکروسافت برای آژاکسی کردن ASP.NET) کار کرده باشید، در برخورد با کنترل UpdatePanel اقلاً برای یک بار هم که شده با خود فکر کرده‌اید کار با آن خیلی ساده است. اما این فقط ظاهر ماجراست چون آژاکسی کردن با UpdatePanel مشکلات خاص خود را داشته و نیاز به تکنیک‌های خاصی برای حل مشکلات آن هست. در ادامه به مرور چند تا از این مشکلات یا تکنیک‌ها که عمدتاً در بخش ‫۷-۳‬‏ و ‫۷-۴‬ فصل ۷ کتاب ASP.NET Ajax in Action آمده است می‌پردازیم:

۱- تزریق کدهای جاوا اسکریپت که قبلا از طریق Page.ClientScript انجام شد حالا باید از طریق متودهای ScriptManager مثل ScriptManager.RegisterStartupScript انجام شود.

۲- همراه با کنترل UpdatePanel دیگر نمی‌توان از Server.Transfer و Response.Write استفاده کرد. در مورد Server.Transfer باید event کنترل مربوطه، یعنی آن کنترلی که Server.Transfer در کد event آن صدا می‌شود را به عنوان PostBackTrigger کنترل UpdatePanel معرفی کنید. در مورد Response.Write هم اگر صرفاً استفاده‌های دیباگ دارید، یعنی از آن در جاهای مختلف برنامه برای نمایش یک پیغام ساده در صفحه استفاده کرده‌اید بهتر است از معادل جاوا اسکریپتی آن یعنی Sys.Debug.trace به همراه ابزارهایی مثل FireBug استفاده کنید.

۳- تا آنجا که می‌شود UpdatePanel کد کمتری را در بر گیرد. هر چقدر که کدهای محصور شده در ContentTemplate آن کمتر باشد Performance بهتری به دست می‌آید.

۴- UpdatePanel یک property دارد به اسم UpdaetMode. با این که حالت پیش فرض این property برابر Always است سعی کنید آن را همیشه در حالت Conditional نگه دارید مگر آن که مجبور شوید از حالت Always استفاده کنید. این property به UpdatePanel می‌گوید چه وقت‌هایی Update شود و چه وقت‌هایی نشود. این تنظیم صرفاً بر روی Performance تاثیر دارد.

۵- قطع ارتباط کنترل‌های سنگینی مثل GridView از parentشان به وسیله کد جاوا اسکریپت control.parentNode.removeNode(gv)‎. این قطع ارتباط بایستی در pageLoading مربوط به PageRequestManager انجام شود.

۶- وقتی که یک صفحه با UpdatePanel آژاکسی شده است به هنگام کار با آن تا نتیجه یک PostBack آسنکرون از سرور بر نگشته است کاری نکنید که صفحه برای بار دوم و سوم و… PostBack بخورد. چون ASP.NET AJAX نمی‌تواند چند PostBack آسنکرون همزمان را به درستی مدیریت کرده و ممکن است دچار گیجی شود.

۷- بعضی کنترل‌ها هستند که کلاً با UpdatePanel مشکل دارند، برای رفع مشکل این طور کنترل‌ها باید منتظر نسخه‌های بعدی dot net framework باشید. FileUpload نمونه‌ای از کنترل‌هایی بود که در framework 2.0 مشکل داشت و احتمالاً تا حالا (زمان انتشار نسخه‌ی بتا ۲ ویژوال استودیو ۲۰۱۰) مشکلش حل شده باشد.

منبع: فصل ۷ کتاب ASP.NET Ajax in Action

مطالعه بیشتر:
۱- آشنایی با کتابخانه Microsoft Ajax Library
۲- جاوا اسکریپتی قوی‌تر با Microsoft Ajax Library
۳- ‫فراخوانی Web Service از Client Side

‫فراخوانی Web Service از Client Side

همان طور که می‌دانیم فراخوانی و استفاده از Web Serviceها تنها از طریق کدهای Server Side امکان پذیر است، اما اگر بخواهیم یک برنامه آژاکسی Client Side بنویسیم و از Web Serviceها هم در کدهای جاوا اسکریپتی سمت کلاینت استفاده کنیم چه باید کرد؟ راه حل این مشکل در ASP.NET AJAX نهفته است. ASP.NET AJAX امکاناتی را ارائه می‌دهد که با کمک آنها می‌توان یک Web Service را درست مثل توابع داخلی جاوا اسکریپت فراخوانی کرد. اقدامات مورد نیاز برای انجام این کار:

۱- تعریف کلاس وب سرویس (asmx) به طور خاص
۲- معرفی وب سرویس مورد نظر با استفاده از Script Manager
۳- فراخوانی غیر همزمان متودهای دلخواه وب سرویس از کد جاوا اسکریپت

ASP.NET AJAX خودش خروجی وب سرویس را به JSON سریالایز کرده، در سمت کلاینت deserialize کرده و نهایتاً در قالب objectهای جاوا اسکریپتی (با ساختار مشابه objectهای سمت سرور) به کلاینت تحویل می‌دهد بدون آن که استفاده کننده یا برنامه‌نویس بویی از جزییات ببرد.
دقت کنید که تا اینجای کار فرض بر این بوده است که وب سرویس مورد نظر در همان سروری قرار دارد که صفحات aspx ما هم قرار دارند. در صورت نیاز به وب‌سرویس‌ها (و دیگر سرویس‌ها) در وب سایت‌های دیگر باید از راه حل‌های دیگری مثل Bridge استفاده کرد.

 

منبع: فصل ۵ کتاب ASP.NET Ajax in Action (در این فصل غیر از Web Serviceها، روش‌ها و ابزارهای دیگری نیز برای ارتباط Asynchronous با سرور گفته شده است)

مطالعه بیشتر:
۱- آشنایی با کتابخانه Microsoft Ajax Library
۲- ‫‫جاوا اسکریپتی قوی‌تر با Microsoft Ajax Library
۳- نمونه کدهای فصل پنج

‫‫جاوا اسکریپتی قوی‌تر با Microsoft Ajax Library

اگر می‌خواهید امکانات C#‎ را در کدهای کلاینتی JavaScript داشته باشید آن هم به همان شکلی که در C#‎ وجود دارد، یک راه ساده وجود دارد: استفاده از Microsoft Ajax Library. این کتابخانه بخش client موتور آژاکس مایکروسافت یعنی ASP.NET AJAX را تشکیل می‌دهد و با استفاده از ScriptManager به طور خودکار به صفحات ASP.NET اضافه می‌شود. Mirosoft Ajax Library به جاوا اسکریپت امکاناتی را اضافه می‌کند تا برنامه‌نویسان C# عمده امکانات Object Oriented ‫را به همان سبک و سیاق C#‎ در دسترس داشته باشند. این امکانات عبارتند از:

۱- تعریف Object و Class (هم Property و هم Method)
‫۲- interface
‫۳- enum
‫۴- inheritance
‫۵- event
‫۶- namespace
‫۷- reflection

دقت کنید که این امکانات به Client Side و جاوا اسکریپت اضافه می‌شود، آن هم به جاوا اسکریپتی که بیش از یک function و object بدون متود چیزی ندارد! به عبارت دیگر این یعنی این که شما با کمک این امکانات می‌توانید بخش زیادی از منطق و ساختار برنامه را با کمک هزاران خط کد جاوا اسکریپت به صورت منظم، ساختارمند و کاملا مشابه کدهای شی گرای C#‎ در سمت Client پیاده سازی کنید.

منبع:
فصل سوم کتاب ASP.NET Ajax in Action
مطالعه بیشتر:
الف- ‫آشنایی با کتابخانه Microsoft Ajax Library
ب- راهنمای خیلی فشرده جاوا اسکریپت

‫آشنایی با کتابخانه Microsoft Ajax Library

کتابخانه Microsoft Ajax Library  بخش کلاینت ASP.NET AJAX را تشکیل می‌دهد. ASP.NET AJAX شامل دو بخش دیگر به نام‌های ASP.NET AJAX Extensions و AJAX Control Toolkit نیز می‌باشد. این کتابخانه نه تنها امکانات Ajax را در کلاینت مهیا می‌کند بلکه یک کتابخانه خیلی خوب برای JavaScript نیز محسوب می‌گردد. با کمک این کتابخانه می‌توان کدهای جاوا اسکریپت را خیلی راحت‌تر، بهینه‌تر و خلاصه‌تر نوشت. مثلا این کتابخانه همچون jQuery به جای استفاده از دستورات طویلی مثل document.getElementById(‘someid’).value; از دستورات خلاصه‌تری مثل $get(‘someid’) استفاده می‌کند.  در ادامه فهرستی از امکانات اولیه این کتابخانه برای کار با جاوا اسکریپت و DOM می‌آید. دقت شود که کتابخانه Microsoft Ajax Library غیر از این فهرست شامل امکانات زیادی برای دیگر کارها از جمله خود Ajax هم هست.
۱- رعایت سازگاری با مرورگرهای مختلف بدون آن که لازم باشد برنامه‌نویس در آن دخالت کند.
۲- ارائه کلیه امکانات به نحوی که برای برنامه‌نویسان دات‌نت آشناتر است. مثل ساختار Array، Exception، فرمت استرینگ کاملاً مشابه دات‌نت.
۳- امکانات Event Handling و Delegates کاملاً مشابه دات‌نت.
۴- Error Handling مشابه ساختار Exception Handling در دات‌نت.
۵- امکان خیلی به دردبخور Debug. دیگر نیاز نیست از alert استفاده شود.
۶- ارائه ساختار client page life cycle مشابه آنچه که در Page در صفحات ASP.NET قرار دارد.
۷- Globalization

نمی‌دانم Microsoft Ajax Library رقیب jQuery یا هر کتابخانه دیگری باشد یا نه، اما ظاهراً استفاده از این کتابخانه حتی برای مقاصد صرفا کلاینتی و غیر آژاکسی هم می‌تواند کیفیت و کارایی کد را بسیار بالا ببرد.

منبع: فصل ۲ کتاب ASP.NET Ajax in Action

به روز رسانی صفحات آژاکسی از سمت سرور

می‌خواستم برای انجام کاری یک صفحه آژاکسی جدید بسازم. وظیفه این صفحه مانیتورینگ یکی از فعالیت‌هایی بود که در Web Server اتفاق می‌افتاد. اولش فکر می‌کردم انجام آن خیلی سخت نباشد. یک Label را وسط یک UpdatePanel می‌گذارم، event سروری مورد نظرم را مشترک شده و سپس در handler آن، Label را به روز رسانی کرده و نهایتاً متود update کنترل UpdatePanel را فراخوانی می‌کنم. اما کار به این سادگی‌ها که فکر می‌کردم نبود. آن event فایر می‌شد، کد handler اجرا می‌شد ولی اصلا کنترل‌های UpdatePanel به روز رسانی نمی‌شدند. با کمی ور رفتن با UpdatePanel فهمیدم که باید آن event به نوعی در Triggers کنترل UpdatePanel قرار می‌گرفت. اما مشکل از آنجا بود که Triggers فقط کنترل‌ها را به عنوان عضو قبول می‌کرد. بعد از کمی جستجوی اعصاب خرد کن دیگر فهمیدم که کار من از بیخ و بن اشتباه و بر خلاف منطق HTTP و آژاکس است! با آژاکس می‌توان صفحه موجود در کلاینت را بدون PostBack به روز رسانی کرد اما این موضوع وقتی اتفاق می‌افتد که یک درخواست از کلاینت به سرور ارسال شود. در مورد کاری که من می‌خواستم انجام دهم هیچ درخواستی از کلاینت وجود ندارد و این سرور است که می‌خواهد بدون درخواست کلاینت به آن اطلاعات بفرستد. شاید شما هم در این لحظه مثل من به یاد صفحه Gmail افتاده باشید و بپرسید پس Gmail چطور این کار را می‌کند؟ همان طور که می‌دانیم اگر صفحه Gmail باز باشد و ایمیل جدیدی به Inbox شما وارد شده باشد این موضوع خود به خود و بدون درخواست قبلی شما در صفحه Gmailتان منعکس می‌گردد. چنین مکانیزمی در friendfeed و twitter هم وجود دارد. کاربر صفحه خاصی از سایت را باز می‌کند و بدون آن که هیچ کاری انجام دهد فقط به صفحه نگاه می‌کند. صفحه هم اتفاقات سمت سرور (رسیدن ایمیل جدید، دریافت تویت جدید، کامنت جدید و…) را بدون درخواست شما در صفحه نمایش می‌دهد.
روشی که Gmail و بقیه استفاده می‌کنند به روش Polling معروف است. در این روش موتور جاوا اسکریپتی آژاکس که در کلاینت فعال است از یک تایمر استفاده کرده و هر چند ثانیه یک بار به سرور متصل شده و در صورت وجود اطلاعات جدید، از سرور درخواست می‌نماید آنها را به کلاینت بفرستد. این طوری کاربر حس می‌کند که این سرور است که اطلاعات جدید را به کلاینت می‌فرستد در حالی که واقعاً باز هم این خود کلاینت است که این درخواست را می‌فرستد.
پیاده‌سازی این مکانیزم در ASP.NET AJAX کار ساده‌ای است. فقط کافیست یک کنترل Timer به صفحه ASPX اضافه کرده و آن را به فهرست Triggers کنترل UpdatePanel اضافه نمایید البته فقط ایونت Tick آن را. سپس بقیه موارد را تنظیم کرده و عملیات مورد نظر خود را به Handler مربوط به Timer.OnTick اضافه کنید. لطفاً اصل ماجرا را در کد زیر مشاهده فرمایید:

<asp:Timer ID=”MyTimer” runat=”server” Interval=”2000″ OnTick=”MyTimer_Tick” Enabled=”true”>
</asp:Timer>
<asp:UpdatePanel ID=”up” runat=”server”>
    <ContentTemplate>
        <asp:TextBox ID=”txaLog” runat=”server” TextMode=”MultiLine” SkinID=”BlackTerminalLTRWide”
            Rows=”20″ Width=”350″ Style=”direction: rtl; text-align: left” />
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID=”MyTimer” EventName=”Tick” />
    </Triggers>
</asp:UpdatePanel>

‫یادگیری ASP.NET AJAX

اولین منبعی که برای یادگیری ASP.NET AJAX پیدا کردم بخش آموزش سایت asp.net بود. ASP.NET AJAX کتابخانه‌ای است که مایکروسافت برای آژاکسی کردن صفحات ASP.NET ارائه داده است. این کتابخانه از روش غیر مستقیم برای آژاکسی کردن صفحات استفاده می‌کند و از این لحاظ درست در نقطه مقابل jQuery قرار می‌گیرد. برای مقایسه این دو راه حل به اینجا مراجعه فرمایید.
قسمت هسته مرکزی (AJAX) این آموزش به ۶ بخش تقسیم شده است. من فکر می‌کردم با خواندن این ۶ بخش چیزهای زیادی از آژاکس مایکروسافت دستگیرم می‌شود. اما با خواندن آنها فهمیدم که این مطالب بیشتر به حالت «مرجع» هستند تا «آموزشی» خصوصاً برای کسی مثل من که نمی‌خواهد (و اجازه ندارد) وارد جزییات پروتکل HTTP و جاوا اسکریپت شود. علاوه بر این آن تصوری که من از آژاکس دارم بیشتر با بخش AjaxControlToolkit هم‌خوانی دارد تا این قسمت. به هر حال خلاصه‌ای از این ۶ بخش عبارت است از:

بخش ۱: آشنایی با ساختار کلی ASP.NET AJAX، شامل روش استفاده از ScriptManager و UpdatePanel.
بخش ۲: Trigger، وجود هم زمان چند UpdatePanel در یک صفحه
بخش ۳: روش‌های دسترسی به سرویس‌های ASP.NET Authentication و ASP.NET Profiling از سمت client.
بخش ۴: مباحث Localization، من در اینجا چیز جالبی که به درد زبان فارسی و سیستم ایرانی بخورد پیدا نکردم.
بخش ۵: مفیدترین بخش، کار با Web Serviceها و استفاده آنها در Client، تبدیل خروجی XML به JSON، روش استفاده از PageMethod و AutoCompleteExtender. این بخش از همه مفیدتر است. چون انعطاف‌پذیری خیلی خوبی به برنامه‌نویس می‌دهد. علاوه بر این هر آنچه که در این بخش یاد گرفته شود به خوبی در روش آژاکس با jQuery هم کاربرد دارد.
بخش ۶: معرفی چندین روش برای اشکال زدایی (Debug) برنامه‌های آژاکسی شامل بر افزونه Firebug در فایرفاکس و توابع موجود در دامنه Sys.Debug

این ۶ بخش را تا اندازه‌ای می‌توان پایه آژاکس دانست چون کاربرد آژاکس برای عموم افراد در مجموعه کنترل‌های AjaxControlToolkit خیلی قابل لمس‌تر است. تعداد این کنترل‌ها خیلی زیاد است به طوری که بخش آموزشی مرتبط با این کنترل‌ها شامل ۵۲ بخش می‌شود! در هر حال آن طور که افراد خیلی مختلفی بیان داشته‌اند یادگیری بخش پایه آژاکس ارزش وقت گذاشتن دارد چون حتی اگر بخواهید آژاکس را با jQuery پیاده‌سازی کنید باز هم در سمت سرور به تسهیلاتی برای کار با سرویس‌های ASP.NET، دیتابیس و Web Serviceها نیاز دارید.

نوشته تکمیلی: ‫‫آیا واقعاً بهتر است به جای ASP.NET AJAX از jQuery استفاده کنیم؟

‫‫آیا واقعاً بهتر است به جای ASP.NET AJAX از jQuery استفاده کنیم؟ – بخش سوم

نتیجه‌گیری
ASP.NET AJAX قابلیت‌های خوبی در بخش سرور و استخراج اطلاعات از آن دارد. jQuery هم قدرت و انعطاف خیلی خوبی در کلاینت دارد. jQuery در ASP.NET MVC به شدت مورد توجه است و بعضی امورات آن  از جمله آژاکس از طریق jQuery انجام می‌پذیرد. پس یادگیری jQuery یعنی یک گام به سوی ASP.NET MVC. نتیجه این که به نظر می‌رسد عاقلانه‌تر این باشد که در یک راه حل آژاکسی از هر دو به طور هم زمان استفاده شود، از jQuery در بخش کلاینت و کنترل‌ها و از ASP.NET AJAX در سمت سرور برای استخراج اطلاعات و ارسال آنها به کلاینت به شیوه‌هایی مثل JSON.

یادگیری
۱- سایت encosia.com – تاکید دارد به استفاده هم‌زمان jQuery و ASP.NET AJAX
۲- سایت http://www.asp.net/learn/ajax/ برای ASP.NET AJAX
۳- کتاب jQuery in Action (۳۷۶ صفحه)
۴- سایت «کد پراجکت» http://www.codeproject.com/KB/ajax/
۵- یک link blog راجع به ASP.NET و AJAX که مطالبش پیوندی است به خیلی از منابع معتبر (tipsdotnet.com )
۶- RefCardهای موجود در سایت DZone
۷- http://blog.dreamlabsolutions.com/
۸- سایت iDevCenter
۹- وبلاگ وحید نصیری

منابع
۱- یک مقایسه قدیمی ولی بسیار دقیق و آموزنده راجع به کتابخانه‌های آژاکسی قابل استفاده در ASP.NET
۲- یک RefCard از DZone با اطلاعاتی دقیق از آژاکس بدون استفاده از ASP.NET
۳- فهرستی از کتابخانه‌های آژاکسی قابل استفاده در زبان‌ها و سکوهای مختلف برنامه‌نویسی
۴- فهرستی از کتابخانه‌های آژاکسی قابل استفاده در ASP.NET اعم از ASP.NET AJAX و غیره
۵- مایکروسافت در این نوشته اعلام کرده پشتیبانی از jQuery را به مجموعه asp.net اضافه کرده است.
۶- مثالی از کاربرد jQuery و ASP.NET به جای آژاکس
۷- ضمن معرفی منابع خوبی برای ارتباط jQuery و ASP.NET راجع به یک ناهمخوانی کوچک jQuery و asp.net ajax صحبت می‌کند.
۸- مقایسه مختصری بین jQuery و ms ajax
۹- بهتر است در asp.net webforms از asp.net ajax استفاده شود ولی در asp.net mvc از jQuery استفاده شود

»»»قسمت‌های اول متن را در بخش اول و دوم بخوانید.

‫‫آیا واقعاً بهتر است به جای ASP.NET AJAX از jQuery استفاده کنیم؟ – بخش دوم

بررسی و مقایسه

آیا jQuery و ASP.NET AJAX رقیب و معادل (alternative) هم هستند؟
تا اندازه‌ای می‌توان گفت بله آنها در خیلی از قسمت‌ها رقیب هم محسوب می‌شوند. اما این دلیل نمی‌شود که یکی را به طور کامل کنار بگذاریم و سراغ دیگری برویم. بلکه (به اعتقاد من) باید سعی کنیم یکی را به عنوان راه حل اصلی انتخاب کنیم و از دیگری به عنوان روش کمکی استفاده کنیم. مثلاً ASP.NET AJAX می‌تواند در سمت سرور به دیتابیس متصل شود و اطلاعات زیادی را به صورت JSON برای jQuery که صرفاً در کلاینت کار می‌کند بفرستد. {۸} {۹}

آیا می‌شود از این دو فناوری درکنار هم استفاده کرد؟
بله. به جز بعضی ناسازگاری‌هایی خیلی کوچک مشکل دیگری وجود ندارد. حتی توصیه شده برای رسیدن به قدرت و سرعت بالاتر از ترکیب هر دو فناوری با هم استفاده شود. {۷}

کدام فناوری را می‌توانم در سکوهای دیگر نیز مورد استفاده قرار دهم؟
فقط jQuery را. از jQuery می‌شود در ASP.NET، ASP.NET MVC، PHP، Perl و… نیز استفاده کرد. در حالی که از ASP.NET AJAX حتی در ASP.NET MVC هم به جز بخش کوچکی از هسته آن را نمی‌توان استفاده کرد چون ASP.NET MVC از WebForm استفاده نمی‌کند. در ASP.NET MVC خود برنامه‌نویس مجبور است State صفحه را نگه دارد در نتیجه خبری از Post Back هم نیست!

مایکروسافت چه رابطه‌ای با jQuery دارد؟
مایکروسافت به jQuery ایمان دارد! jQuery در حال حاضر بخشی از ASP.NET MVC است و به زودی در دیگر محصولات مایکروسافت هم ظاهر خواهد شد. علی‌الظاهر مایکروسافت قصد داشته برای محصولاتش کتابخانه‌ای مانند jQuery ایجاد کند ولی وقتی دیده چنین چیزی از قبل وجود دارد برخلاف همیشه تصمیم گرفته به جای ایجاد نسخه مخصوص به خودش از همان jQuery استفاده کند. {۵}

مزایا و معایب هر کدام چیست؟
ASP.NET AJAX:
۱- مزیت: یادگیری خیلی زیادی نمی‌خواهد. لازم نیست XHR را بشناسید و کلی هم HTML، CSS و جاوا اسکریپت بلد باشید.
۲- مزیت: با کنترل‌های معمول ASP.NET یکی می‌شود و نیازی به دستکاری ندارد. مثلاً خیلی از کنترل‌های معمول ASP.NET مثل TextBox و Label را می‌توان با قرار دادن در یک UpdatePanel آژاکسی کرد.
۳- مزیت: یکپارچگی آن با ASP.NET باعث می‌شود بتواند به راحتی از سرویس‌های موجود در ASP.NET مثل Profile در عملیات آژاکسی استفاده کند.
۴- ایراد: خیلی کند است و در خیلی آزمایش‌ها تا ۸۰ درصد پهنای باند را به علت وجود ViewStateهای حجیم تلف می‌کند.
۵- ایراد: مهارت‌های به دست آمده از طریق آن (به جز بخشی از هسته آن) را نمی‌توان در هیچ جای دیگر استفاده کرد.
jQuery:
۱- مزیت: چون از روش برنامه‌نویسی مستقیم استفاده می‌کند خیلی سریع‌تر است.
۲- مزیت: جامعه بسیار فعال، متنوع و رو به رشدی دارد. جامعه فعال یعنی محصولات جانبی و support بیشتر.
۳- مزیت: کدباز و مجانی است.
۴- مزیت: مهارت به دست آمده از jQuery را در سکوهای دیگری غیر از دات‌نت هم می‌توان استفاده کرد.
۵- مزیت: مهارت به دست آمده از jQuery را می‌توان در مباحث دیگری غیر از آژاکس هم مورد استفاده قرار داد.
۶- ایراد: نیاز به مقدار زیادی یادگیری HTML، CSS، JavaScript و… دارد.
۷- ایراد: به احتمال خیلی زیاد نشود از بعضی کنترل‌های ASP.NET به صورت معمول استفاده کرد. مثلاً نمی‌دانم اگر قرار باشد GridView را با کمک jQuery آژاکسی کرد چه اتفاقی برایش می‌افتد. مثلاً می‌شود از Binding به روش معمول استفاده کرد یا نه این که شاید اصلاً مجبور باشیم از یک کنترل GridView کلاینتی مثل FlexGrid استفاده کنیم.

»»»قسمت قبلی مطلب را در بخش اول بخوانید
»»»ادامه مطلب را در بخش سوم بخوانید

‫‫آیا واقعاً بهتر است به جای ASP.NET AJAX از jQuery استفاده کنیم؟ – بخش اول

مقدمه
مدتی است که لازم شده برای آژاکسی کردن بخشی از یک برنامه تحت وب بزرگ کمی ASP.NET AJAX یاد بگیریم. اما دوستان زیادی شدیداً توصیه کرده‌اند به جای ASP.NET AJAX از روش‌های مستقیم کار با XmlHttpRequest یا ابزارهایی مثل jQuery استفاده کنیم. با آن که قبلاً به استفاده از ASP.NET AJAX مصمم بودیم ولی با شنیدن حرف‌های دیگران به شک افتاده که کمی هم راجع به jQuery تحقیق کنیم و آژاکس را دقیق‌تر بررسی کنیم. آنچه که در ادامه می‌آید نتیجه ۳ روز بررسی آژاکس در ASP.NET است. این نوشته در سه بخش تقدیم می‌گردد. منابع مورد اشاره در آخر پاراگراف‌ها در انتهای بخش سوم آمده است. در ابتدا بعضی مفاهیم و اصطلاحات مورد نیاز مرور می‌شود.

مفاهیم
آژاکس: روشی برای تبادل اطلاعات کلاینت و سرور به صورت پشت صحنه با استفاده از جاوا اسکریپت، شی XmlHttpRequest و DOM به طوری که صفحه post back نخورد و refresh نشود. {۲}
DOM: Document Object Model ساختار یک صفحه در داخل مرورگر است. با جاوا اسکریپت می‌توان DOM یک صفحه HTML را در همان سمت کلاینت تغییر داد و عناصر HTML جدید را به آن کم و زیاد کرد.
XmlHttpRequest: این شی (آبجکت) که به نام XHR معروف است مسئول تبادل اطلاعات ناهمزمان بین کلاینت و سرور است. تمامی روش‌های آژاکسی دنیا از همین آبجکت XHR برای آژاکسی کردن صفحات استفاده می‌کنند.
روش برنامه‌نویسی مستقیم و غیر مستقیم آژاکس: روش‌هایی که به طور مستقیم با خود XHR کار می‌کنند یا خیلی به آن نزدیک هستند روش مستقیم نامیده می‌شوند. خیلی از کتابخانه‌های جاوا اسکریپتی مثل jQuery و ProtoType و خیلی از روش‌هایی که در زبان‌های PHP و Perl استفاده می‌شوند از این دسته هستند. از سوی دیگر عملکرد بعضی کتابخانه‌ها به صورتی است که برنامه‌نویس اصلاً متوجه وجود XHR نمی‌شود. روشی که این کتابخانه‌ها برای مخفی نگه داشتن جزییات صطح پایین از برنامه‌نویس استفاده می‌کنند روش غیر مستقیم نامیده می‌شود. ASP.NET AJAX کتابخانه‌ای است که از روش غیر مستقیم برنامه‌نویسی آژاکس استفاده می‌کند. {۱}
ASP.NET AJAX: کتابخانه نیمه کدباز مایکروسافت برای پیاده‌سازی قابلیت‌های آژاکس در ASP.NET به روش غیر مستقیم است. این کتابخانه تمام جزییات سطح پایین را به طور کامل از دید برنامه‌نویس مخفی می‌کند به طوری که برای خیلی از عملیات معمول در آژاکس تنها استفاده از چند خط کد کفایت می‌کند. ASP.NET AJAX در عین راحتی که به برنامه‌نویس می‌دهد در خیلی از حالات سرعت عملیات را به علت حجیم بودنش به شدت کاهش می‌دهد. این کتابخانه در مقابل راحتی که به برنامه‌نویس می‌دهد، انعطاف پذیری را از بین برده و دست و پای برنامه‌نویس را می‌بندد. {۴}
jQuery: یک کتابخانه جاوا اسکریپتی خیلی کم حجم است که طی مدت اخیر طرفداران خیلی زیادی پیدا کرده است. هدف اصلی jQuery ارائه امکانات خیلی قدرتمند برای کار با DOM است. گفته می‌شود استفاده از jQuery برای عملیات DOM نسبت به استفاده از خود جاوا اسکریپت حدود ۹۰ درصد صرفه‌جویی در حجم کد دارد. jQuery دارای plug-inهای خیلی زیادی برای امور مختلف مثل آژاکس و انیمیشن است. شرکت‌های مایکروسافت و نوکیا در مهر ۱۳۸۷ اعلام کردند jQuery را به عنوان بخشی از محصولاتشان ارائه خواهند داد. jQuery اولین پروژه کدباز غیر مایکروسافتی است که به محصولات مایکروسافت اضافه می‌شود. {۵}
JSON: یک قالب داده ساده مشابه XML است که برای تبادل اطلاعات بین سرور و کلاینت مورد استفاده قرار می‌گیرد. این قالب به دلیل سادگی آن از XML رایج‌تر است.

ادامه مطلب در بخش دوم و سوم بخوانید…