برنامه های وب يكی از مهمترين دستاوردهای اخير در صنعت نرم افزار می باشند كه علل آن را می بايست در تاثير اينترنت بر دنيای گسترده نرم افزار جستجو كرد . آشنائی با معماری برنامه های وب و بكارگيری فن آوری های متعدد با توجه به ساختار اين نوع برنامه های كامپيوتری برای تمامی پياده كنندگان علاقه مند حضور موثر و مستمر در اين عرصه ، امری لازم و ضروری است .
برنامه های‌ وب دارای سه ويژگی مهم و برجسته می باشند :

مبتنی بر وب می باشند ( Web-based )
از معماری‌ سرويس گيرنده - سرويس دهنده Three tire استفاده می نمايند .
سيستم های پردازش اطلاعات می باشند ( در مقابل سيستم های عرضه اطلاعات )
با توجه به موضوع اين مقاله اجازه دهيد بر روی ويژگی دوم متمركز شده و با آن بيشتر آشنا شويم .
واژه "سرويس گيرنده - سرويس دهنده " نشاندهنده اين واقعيت است كه از شبكه های مبتنی ‌بر سرويس دهندگان به منظور مديريت اشتراك منابع استفاده می گردد . براي توزيع پردازش از پتانسيل های سخت افزار‌ی و نرم افزاری سرويس دهندگان و سرويس گيرندگان استفاده می گردد و هر يك دارای سهمی در كل پردازش می باشند ( گرچه در توزيع سهم پردازش ، عدالت به درستی رعايت نشده باشد ) .
با توجه به رويكرد فوق، پياده كنندگان برنامه های وب می توانند به منظور تامين خواسته های يك برنامه از پتانسيل های پردازش سمت سرويس دهنده و يا سمت سرويس گيرنده استفاده نمايند . برای تحقق پردازش های سمت سرويس دهنده و سرويس گيرنده از فن آوری های متعددی استفاده می گردد .
ASP.NET ، يك فن آوری سمت سرويس دهنده است و نمی تواند مستقيما" با مرورگر تعامل و يا ارتباط داشته باشد .به عنوان نمونه ، در ASP.NET مكانيزمی وجود ندارد كه بتوان با استفاده از آن داده تايپ شده از طريق صفحه كليد توسط كاربر در برنامه مرورگر را دريافت ، به رويدادهای موس پاسخ و عملياتی را انجام داد كه مستلزم تعامل مستقيم با كاربر می باشند . ASP.NET صرفا" می تواند نتايج اينچنين تعاملاتی را پس از ارسال صفحه مشاهده و از آنان استفاده نمايد و قادر به پاسخگوئی مستقيم به رويدادهای ايجاد شده در سطح مرورگر نمی باشد .
به منظور برخورد و مديريت تعامل با مرورگر و رويدادهای محقق شده در آن سطح ، بهترين گزينه استفاده از اسكريپت های سمت سرويس گيرنده است كه توسط يكی از زبان های اسكريپت نويسی نظير جاوااسكريپت نوشته می گردند . اسكريپت های سمت سرويس گيرنده در مرورگر اجراء شده و می توانند بلافاصله نسبت به عمليات انجام شده توسط كاربر از خود واكنش نشان دهند . مثلا" با استفاده از اسكريپت های سمت سرويس گيرنده می توان يك افكت rollover را ايجاد و يا واكنش مناسبی را در زمان حركت موس بر روی يك button و يا يك آيتم خاص موجود در منو انجام داد .
اسكريپت های سمت سرويس گيرنده توان عملياتی پياده كنندگان را به منظور برخورد با رويدادهائی كه در سطح لايه رابط كاربر محقق می شوند و لازم است كه بلافاصله به آنان پاسخ داده شود ، افزايش می دهد .

كنترل های سرويس دهنده ASP.NET و اسكريپت های سمت سرويس گيرنده
تعدادی از كنترل های سرويس دهنده ASP.NET به منظور انجام وظايف از قبل تعريف شده خود نيازمند استفاده از اسكريپت های سمت سرويس گيرنده می باشند . به عنوان نمونه كنترل LinkButton برای انجام فرآيند Postback نيازمند استفاده از اسكريپت های سمت سرويس گيرنده است . كد زيرنحوه استفاده ازكنترل LinkButton را نشان می دهد . ( پس از كليك بر روی آن يك متن در كنترل label نمايش داده می شود) .

<%@ Page Language="VB" AutoEventWireup="True" %>






LinkButton Example



Text="Test LinkButton"
Font-Name="Tahoma"
Font-Size="14pt"
OnClick="LinkButton_Click"
runat="server"/>





تحقق برخی از پتانسيل و قابليت های صفحات ASP.NET نيز در ارتباط با اسكريپت های سمت سرويس گيرنده است و لازم است با نحوه استفاده كنترل های سرويس دهنده ASP.NET از اسكريپت های سمت سرويس گيرنده آشنا شويم چراكه از اين طريق برداشت ما از نحوه تاثير اسكريپت های سمت سرويس گيرنده بر روی صفحات وب ASP.NET شكل واقعی و منطقی خود را پيدا خواهد كرد .
اسكريپت های سمت سرويس گيرنده مورد نياز كنترل های سرويس دهنده ASP.NET به صورت اتوماتيك به صفحه اضافه می گردند. توجه داشته باشيد كه اسكريپت سمت سرويس گيرنده كه به صورت اتوماتيك برای كنترل های سرويس دهنده ايجاد می گردد ، مستقل از ساير اسكريپت های سمت سرويس گيرنده ای است كه توسط پياده كنندگان نوشته می گردد .
عناصر زير از اسكريپت های سمت سرويس گيرنده استفاده می نمايند ( كنترل و يا برخی خصلت های مرتبط با يك كنترل) :

كنترل های Page .HtmlForm و Panel : خصلت های DefaultFocus ، DefaultButton و MaintainScrollPositionOnPostback نيازمند استفاده از اسكريپت های سمت سرويس گيرنده می باشند .

كنترل های LinkButton, ImageButton و HtmlButton از اسكريت های سمت سرويس گيرنده به منظور حمايت از رويداد Postback استفاده می نمايند. توجه داشته باشيد كه كنترل های Button Web server control، HtmlInputButton و HtmlInputImage به اسكريت های سمت سرويس گيرنده نياز ندارند .

Calendar : كنترل فوق از كنترل LinkButton به منظور پياده سازی حركت در بين روز ، هفته و ماه استفاده می نمايد . كنترل LinkButton از اسكريپت های سمت سرويس گيرنده برای رويداد postback استفاده می نمايد . در صورتی كه از كنترل calendar صرفا" به منظور نمايش يك ماه بدون امكان انتخاب و يا حركت استفاده می گردد ، كنترل فوق نيازی به استفاده از اسكريت هآی سمت سرويس گيرنده ندارد .

DetailsView : در صورتی كه كنترل شامل دكمه هائی باشد كه به عنوان كنترل های LinkButton پيكربندی شده باشند ( برای ويرايش ، paging و ...)، به منظور انجام عمليات فوق از اسكريپت های سمت سرويس گيرنده استفاده می گردد . در صورتی كه خصلت EnablePagingCallbacks فعال و مقدار آن True باشد ، از اسكريپت های سمت سرويس گيرنده به منظور مديريت callback استفاده می گردد .

GridView : در صورتی كه كنترل شامل دكمه هائی است كه به عنوان كنترل های LinkButton پيكربندی شده باشند ( برای ويرايش ، paging و ...) ، به منظور انجام عمليات فوق از اسكريپت های سمت سرويس گيرنده استفاده می گردد . از اسكريپت های سمت سرويس گيرنده به منظور مرتب سازی و paging استفاده می گردد (در صورت حمايت كنترل منبع داده مرتبط با آن ). در صورتی كه خصلت EnablePagingCallbacks فعال و مقدار آن True باشد ، از اسكريپت های سمت سرويس گيرنده به منظور مديريت callback استفاده می گردد .

Label : خصلت AssociatedControlID به همراه خصلت AccessKey اسكريپت های سمت سرويس دهنده ای را در پاسخ به keyboard shortcut توليد می نمايند. در صورتی كه خصلت های فوق مقداردهی نشده باشند ، كنترل Label نيازی به استفاده از اسكريپت های سمت سرويس گيرنده ندارد .

Menu: از اسكريپت های سمت سرويس گيرنده برای باز وبستن آيتم های منو ، نمايش پانل های pop-out و كنترل نمايش زمانی كه كاربر اشاره گر موس را بر روی آيتم های موجود در منو قرار می دهد ، استفاده می گردد .

TreeView ، از اسكريپت های سمت سرويس گيرنده به منظور باز و بستن گره ها استفاده می نمايد .

هر نوع كنترل سرويس دهنده ای كه خصلت PostBack آن true باشد : رفتار خصلت AutoPostBack برای كنترل های غير button با استفاده از اسكريپت های سمت سرويس گيرنده پياده سازی می گردد .

كنترل های Web Part از اسكريپت های سمت سرويس گيرنده به منظور حمايت از Drag-and-drop ، افزودن كنترل های Web part به Zones و Verbs و صدور و يا ورود توانمندی ها استفاده می گردد .

كنترل های Validator ( شامل CompareValidator، CustomValidator ، RangeValidator ، RegularExpressionValidator ، RequiredFieldValidator ) ، از اسكريت های سمت سرويس گيرنده به منظور ارائه پاسخ فوری پس از بررسی اعتبار داده استفاده می نمايند. در صورتی كه سرويس گيرنده از اسكريپت حمايت نمی نمايد ، validation صرفا" بر روی سرويس دهنده اجراء خواهد شد .

هر متد و يا خصلتی كه بر روی كنترل ها focus می نمايد ، نظير متد Focus بر روی كنترل ها و متد SetFocus صفحه : از اسكريپت های سمت سرويس گيرنده به منظور تنظيم focus بر روی كنترل مورد نظر استفاده می گردد .

اسكريت های سمت سرويس گيرنده مورد نياز برای هر يك از كنترل ها و اعضاء به صورت اتوماتيك توليد و به همراه صفحه ارسال می گردد .
در برخی موارد ممكن است كاربران امكان استفاده از اسكريپت را در مرورگر خود غيرفعال نمايند ( اقدامی در جهت افزايش ايمنی سيستم ) . در صورت انجام اين كار ، نمی توان از پتانسيل های ارائه شده توسط اسكريپت های سمت سرويس گيرنده استفاده نمود و بديهی است كه برخی كنترل ها نظير كنترل LinkButton ، بطور كامل از كار بيافتد و يا قابليت های خصلت AutoPostBack غيرفعال گردد . برخی كنترل ها از وضعيت فوق كمتر متاثر شده و در شرايط خاصی می توانند عمليات خود را انجام دهند . مثلا" كنترل های Validation می توانند در صورت بروز مشكل در خصوص اجرای اسكريپت های سمت سرويس گيرنده ، آنان را سمت سرويس دهنده اجراء نمايند ( با اين تفاوت كه به دليل اجرای آنان بر روی سرويس دهنده به كاربر سريعا" پاسخ داده نمی شود ) .

استفاده از اسكريپت های سمت سرويس گيرنده توسط پياده كننده در صفحات ASP.NET
با توجه به اين كه رفتار صفحات ASP.NET در برخی موارد مشابه صفحات HTML است ، می توان اسكريپت های سمت سرويس گيرنده خود را به صفحات ASP.NET اضافه نمود . در صفحات ASP.NET از اسكريپت های سمت سرويس گيرنده به منظور پاسخ به رويدادهای محقق شده در سطح لايه رابط كاربر، حمايت می گردد . استفاده از اسكريپت های سمت سرويس گيرنده در يك صفحه ASP.NET همانند ساير صفحات HTML است . با افزودن يك بلاك script به صفحه امكان نوشتن اسكريپت های سمت سرويس گيرنده فراهم می گردد . پياده كنندگان می توانند از اسكريپت های سمت سرويس گيرنده به منظور نوشتن event handler به منظور پاسخ به رويدادهای محقق شده در سمت سرويس گيرنده نظير رويداد onload صفحه نيز استفاده نمايند . زمانی كه يك صفحه ASP.NET در مرورگر اجراء می گردد ، با استفاده از اسكريپت های سمت سرويس گيرنده می توان عناصر موجود بر روی صفحه را آدرس دهی و متناسب با رويداد محقق شده ، مديريت آنان را در سمت سرويس گيرنده برعهده گرفت .
استفاده از اسكريپت های سمت سرويس گيرنده در صفحات ASP.NET نسبت به صفحات HTML در برخی موارد متفاوت است :

اضافه كردن event handler سمت سرويس گيرنده به كنترل های سرويس دهنده ASP.NET

مراجعه به كنترل های سرويس دهنده از طريق اسكريپت های سمت سرويس گيرنده

افزودن اسكريپت های سمت سرويس گيرنده به صفحه به صورت پويا

ايجاد رويداد كليك سمت سرويس گيرنده برای كنترل های سرويس دهنده

اشتراك اطلاعات بين اسكريپت های سمت سرويس گيرنده و كدهای سمت سرويس دهنده

فراخوانی كدهای سمت سرويس دهنده از طريق اسكريپت های سمت سرويس گيرنده بدون نياز به postback

در بخش دوم به بررسی هر يك از موارد فوق خواهيم پرداخت .