‫معرفی کتاب 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
۹- به روز رسانی صفحات آژاکسی از سمت سرور

‫یادگیری 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 استفاده کنیم؟

‫مشکل اضافه شدن اتوماتیک xmlns به web.config

در Visual Studio 2005 (و احتمالا نسخه ۲۰۰۸) هر بار که Web Site Administration Tool در یک پروژه وب اجرا شود عبارت xmlns=http://schemas.microsoft.com/.NetConfiguration/v2.0“‎ به عنوان یک attribute به تگ <configuration> در web.config اضافه می‌شود. علی الظاهر این کار از دید مایکروسافت یک باگ است و تگ فوق الذکر نباید چنین attributeی داشته باشد. وجود این xmlns در برنامه‌های وبی باعث می‌شود صفحاتی که از AjaxControlToolkit و به خصوص کنترل ConfirmButtonExtender استفاده کرده‌اند دچار مشکل شده و خطای زیر را نشان دهند:
The control with ID ‘cbe1’ requires a ScriptManager on the page. The ScriptManager must appear before any controls that need it.

برای حل این مشکل یعنی اضافه نشدن خودکار xmlns به تگ <configuration> باید فایل WebAdminPage.cs را از شاخه app_code باز کرده و خط:

config.NamespaceDeclared = true;

را در آن به صورت زیر تغییر دهید:

config.NamespaceDeclared = false;

این فایل را یا باید از آدرس C:WINDOWSMicrosoft.NETFrameworkv2.0.50727ASP.NETWebAdminFilesApp_Code پیدا کنید یا اگر مجموعه مدیریتی asp.net را به پروژه خود اضافه کرده‌اید آن را از داخل پروژه خود بیابید.

وجود xmlns فوق الاشاره در app.config برنامه‌های ویندوزی (ویندوز فرم، کنسول) هم مشکل زاست و باعث بروز خطای This application has failed to start because the application configuration is incorrect می‌شود:

This application has failed to start because the application configuration is incorrect

در مورد برنامه‌های ویندوزی نگرانی خاصی وجود ندارد. صرف برداشتن xmlns برای رفع خطا کفایت می‌کند. چون این attribute در حالت نمی‌تواند به طور خود به خود اضافه شود.

مراجع:
http://www.velocityreviews.com/forums/t121990-webconfig-schema-messages.html
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=102404
http://forums.asp.net/p/981068/1359525.aspx

تجربه‌ای شیرین با «آژاکس»‏

asp.net ajax
تنها تجربه من با آژاکس مربوط به زمانی است که هنوز نسخه‌های «اطلس» روی بتا بودند و چون علاقه خودم هم بیشتر به سطح سرویس و Performance بود تا به UI در نتیجه چیز زیادی راجع به برنامه نویسی با آژاکس و سختی و آسان آن نمی‌دانستم. در طول چند روز گذشته مجبور شدم برای رفع یک خطا کمی با آژاکس درگیر شده و یک نمونه برنامه ساده بر اساس آن بنویسم. در این نمونه چند خطی که کاملا در حد یک Hello World بود، یک دکمه ساده روی صفحه گذاشته و با هر بار کلیک روی آن ساعت را روی خود دکمه نشان می‌دادم. یک کنترل ConfirmButtonExtender (از مجموعه کنترل‌های AjaxControlToolkit) را هم روی صفحه گذاشتم و به آن گفتم هر بار که روی دکمه نمایش ساعت کلیک شد از کاربر تایید بگیرد و اگر کاربر عملیات را لغو کرد هیچ اتفاق خاصی نیفتد در غیر این صورت ساعت را نمایش دهد. این هم کد آن که در VS 2008 نوشته شده است:
<%@ Page Language="C#" AutoEventWireup="true" 
CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%
@ Register Assembly="AjaxControlToolkit"
Namespace="AjaxControlToolkit" TagPrefix="ajax" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<
head runat="server">
<
title>Untitled Page</title>
</
head>
<
body>
<
form id="form1" runat="server">
<
asp:ScriptManager ID="ScriptManager1" runat="server">
</
asp:ScriptManager>
<
ajax:ConfirmButtonExtender ID="cbe1" runat="server"
ConfirmText="Are you sure???" TargetControlID="btn1">
</
ajax:ConfirmButtonExtender>
<
asp:Button runat="server" ID="btn1"
OnClick="btn1_Click" />
</
form>
</
body>
</
html>

خوبی این کد و بقیه نمونه‌هایی که در سایت ASP.NET AJAX Control Toolkit قرار دارد این است که در فایر فاکس هم به راحتی اجرا می‌شود. نمونه‌ی قابل اجرای همین کد در سایت آژاکس در اینجا قرارد دارد.

مراجع
نمونه برنامه‌های آژاکسی ASP.NET AJAX Control Toolkit

‫پروژه مهاجرت از نسخه بتای ASP AJAX به نسخه فاینال

با وجود آنکه مدت‌هاست ASP AJAX از نسخه‌های CTP، RC و بتا در آمده و حتی در Framework 3.5 با خود دات نت یکی شده است ما هنوز نتوانسته بودیم از نسخه‌های بتا به نسخه نهایی سویچ کنیم.
تنوع شماره نسخه‌های مختلف، ابهام بین File Version و Assembly Version، عوض شدن بعضی Namespaceها، پراکنده شدن فایل‌های مربوطه در سرتاسر کامپیوترها و عملکرد ناشناخته بعضی کنترل‌ها از علل اصلی این تاخیر بزرگ بود. یکی از بدترین معضلاتی که در نتیجه این تاخیر گریبان گیر ما شده بود مشکلات عدیده نصب نرم افزارهای شرکت در محل مشتری‌های جدید بود. سورس‌های اصلی شرکت از نسخه موجود در GAC استفاده می‌کردند و به همین خاطر هیچ نسخه‌ای از فایل‌های Microsoft.Web.Extensions، System.Web.Extensions و AjaxControlToolkit در حین Publish کپی نمی‌شدند و در نتیجه نصاب برنامه‌ها نسخه‌های جداگانه‌ای از این فایل‌ها را تهیه و در سرورها کپی می‌کردند. از آنجا که محل تهیه این فایل‌ها اینترنت یا فلش دیسک نصاب برنامه بود، لزوما با نسخه استفاده شده در سورس شرکت یکی نبوده و باعث به هم ریختگی شدید web.config و عدم کارکرد صحیح برنامه می‌گردید.
هفته پیش فرصتی پیش آمد که چند تا از کامپیوترها را پاکسازی کنم و در حین این پاکسازی‌ها موفق به اجرای پروژه مهاجرت از نسخه‌های موقتی ASP AJAX به نسخه نهایی شدم هرچند که در این بین مجبور شدم چند تا از صفحه‌ها، کنترل‌ها و سرویس‌ها را هم Exclude کنم!
جدول زیر راهنمای خوبی در مورد File & Assembly Version نسخه‌های مربوطه می‌باشد:

نسخه نهایی (Final)

System.Web.Extensions

Assembly Version: 1.0.61025.0

File Version: 1.0.61231.0

AjaxControlToolkit

Assembly Version: 1.0.20229.20821

File Version: 1.0.20229.0

نسخه‌های قبل از نهایی (RC, CTP, Beta)

Microsoft.Web.Extensions

Assembly Version: 1.0.61025.0

File Version: 1.0.61025.61025

AjaxControlToolkit

Assembly Version: 1.0.61106.0

File Version: 1.0.61106.0