اسكريپت های سمت سرويس گيرنده در صفحات ASP.NET
اسكريپت های سمت سرويس گيرنده در صفحات ASP.NET
برنامه های وب دارای سه ويژگی مهم و برجسته می باشند :
با توجه به موضوع اين مقاله اجازه دهيد بر روی ويژگی دوم متمركز شده و با آن بيشتر آشنا شويم .
واژه "سرويس گيرنده - سرويس دهنده " نشاندهنده اين واقعيت است كه از شبكه های مبتنی بر سرويس دهندگان به منظور مديريت اشتراك منابع استفاده می گردد . براي توزيع پردازش از پتانسيل های سخت افزاری و نرم افزاری سرويس دهندگان و سرويس گيرندگان استفاده می گردد و هر يك دارای سهمی در كل پردازش می باشند ( گرچه در توزيع سهم پردازش ، عدالت به درستی رعايت نشده باشد ) .
با توجه به رويكرد فوق، پياده كنندگان برنامه های وب می توانند به منظور تامين خواسته های يك برنامه از پتانسيل های پردازش سمت سرويس دهنده و يا سمت سرويس گيرنده استفاده نمايند . برای تحقق پردازش های سمت سرويس دهنده و سرويس گيرنده از فن آوری های متعددی استفاده می گردد .
ASP.NET ، يك فن آوری سمت سرويس دهنده است و نمی تواند مستقيما" با مرورگر تعامل و يا ارتباط داشته باشد .به عنوان نمونه ، در ASP.NET مكانيزمی وجود ندارد كه بتوان با استفاده از آن داده تايپ شده از طريق صفحه كليد توسط كاربر در برنامه مرورگر را دريافت ، به رويدادهای موس پاسخ و عملياتی را انجام داد كه مستلزم تعامل مستقيم با كاربر می باشند . ASP.NET صرفا" می تواند نتايج اينچنين تعاملاتی را پس از ارسال صفحه مشاهده و از آنان استفاده نمايد و قادر به پاسخگوئی مستقيم به رويدادهای ايجاد شده در سطح مرورگر نمی باشد .
به منظور برخورد و مديريت تعامل با مرورگر و رويدادهای محقق شده در آن سطح ، بهترين گزينه استفاده از اسكريپت های سمت سرويس گيرنده است كه توسط يكی از زبان های اسكريپت نويسی نظير جاوااسكريپت نوشته می گردند . اسكريپت های سمت سرويس گيرنده در مرورگر اجراء شده و می توانند بلافاصله نسبت به عمليات انجام شده توسط كاربر از خود واكنش نشان دهند . مثلا" با استفاده از اسكريپت های سمت سرويس گيرنده می توان يك افكت rollover را ايجاد و يا واكنش مناسبی را در زمان حركت موس بر روی يك button و يا يك آيتم خاص موجود در منو انجام داد .
اسكريپت های سمت سرويس گيرنده توان عملياتی پياده كنندگان را به منظور برخورد با رويدادهائی كه در سطح لايه رابط كاربر محقق می شوند و لازم است كه بلافاصله به آنان پاسخ داده شود ، افزايش می دهد .
كنترل های سرويس دهنده ASP.NET و اسكريپت های سمت سرويس گيرنده
<%@ Page Language="VB" AutoEventWireup="True" %> |
تحقق برخی از پتانسيل و قابليت های صفحات 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 در برخی موارد متفاوت است :
• اضافه كردن event handler سمت سرويس گيرنده به كنترل های سرويس دهنده ASP.NET
• مراجعه به كنترل های سرويس دهنده از طريق اسكريپت های سمت سرويس گيرنده
• افزودن اسكريپت های سمت سرويس گيرنده به صفحه به صورت پويا
• ايجاد رويداد كليك سمت سرويس گيرنده برای كنترل های سرويس دهنده
• اشتراك اطلاعات بين اسكريپت های سمت سرويس گيرنده و كدهای سمت سرويس دهنده
• فراخوانی كدهای سمت سرويس دهنده از طريق اسكريپت های سمت سرويس گيرنده بدون نياز به postback
اضافه كردن event handler سمت سرويس گيرنده به كنترل های سرويس دهنده ASP.NET
افزودن event handler سمت سرويس گيرنده به صورت تعريفی
<asp:textbox id="TextBox1" runat="server" text="Sample Text" /> |
در صورتی كه از يك attribute استفاده گردد كه نتوان آن را به يك خصلت خاص map نمود ، ASP.NET در زمان پردازش سمت سرويس دهنده از آن صرفنظر نموده و آن را به عنوان as-is به همراه ساير تگ های HTML توليد شده برای كنترل سرويس دهنده به مقصد مرورگر ارسال می نمايد . مثلا" كنترل TextBox دارای خصلتی با نام onKeyup نمی باشد . بنابراين در صورتی كه به همراه كنترل TextBox از خصلت فوق استفاده گردد ، ASP.NET بدون انجام هيچگونه واكنشی آن را برای مرورگر سرويس گيرنده ارسال می نمايد . با توجه به نحوه برخورد ASP.NET با اينچنين خصلت هائی ، می توان رويدادهآی مورد نظر را به كنترل های سرويس دهنده و از طريق تعريف تگ های مربوطه نسبت داد .
كد زير نحوه استفاده از يك event handler سمت سرويس گيرنده به همراه كنترل سرويس دهنده TextBox را نشان می دهد . پس از درج هر حرف در TextBox ( بروز رويداد ) ، طول آن در يك عنصر span با نام spanCounter نمايش داده می شود ( event handler ) .
<%@ Page Language="VB"%> |
در صورت ضرورت می توان event handler سمت سرويس گيرنده را در قالب يك تابع سازماندهی تا پس از بروز رويداد ( فشردن يك كليد ) مرتبط با يك كنترل سرويس دهنده ، فعال و وظايف خود را انجام دهد .
<%@ Page Language="VB"%> |
افزودن يك event handler سمت سرويس گيرنده از طريق برنامه و در زمان اجراء
كد زير نحوه اضافه كردن يك خصلت به يك كنترل سرويس دهنده در زمان اجراء و به منظور اجرای يك event handler را نشان می دهد . اسكريپت سمت سرويس گيرنده طول متن تايپ شده در كنترل TextBox را در هر لحظه نمايش می دهد . در اسكريپت فوق ،فرض شده است كه صفحه دارای يك عنصر span با نام spanCounter است .
<%@ Page Language="VB"%> |
افزودن يك رويداد onClick سمت سرويس گيرنده به كنترل سرويس دهنده Button
كد زير نحوه اضافه كردن يك رويداد كليك سمت سرويس گيرنده به كنترل Button را نشان می دهد . پس از كليك بر روی Button يك پيام ارائه و در صورت تائيد ، اطلاعات برای سرويس دهنده ارسال می گردد . ( با كليك اول ، از يك روتين سمت سرويس گيرنده پرای پاسخگوئی به آْن استفاده می شود و پس از كليك مجدد بر روی Button نمايش داده شده در جعبه محاوره ای ، اطلاعات برای سرويس دهنده ارسال تا متناسب با شرايط برنامه با آنان برخورد شود) .
<%@ Page Language="VB" %> |
شناسائی و مراجعه به كنترل های سرويس دهنده از طريق اسكريپت های سمت سرويس گيرنده
<asp:textbox id="TextBox1" runat="server" text="Sample Text" /> |
خصلت ClientID ، مقدار TextBox1 را خواهد گرفت و در نهايت نتايج توليد شده زير برای يك مرورگر مبتنی بر HTML ارسال می گردد :
<input name="TextBox1" type="text" value="Sample Text" id="TextBox1" /> |
بنابراين ، به منظور دستيابی به يك كنترل سرويس دهنده ASP.NET از طريق اسكريپت های سمت سرويس گيرنده ، می توان از خصلت های Id و name استفاده نمود . برای آدرس دهی يك كنترل سرويس دهنده ASP.NET توسط اسكريپت های سمت سرويس گيرنده ، می توان از نام كامل آن نيز استفاده نمود ( fully qualified reference ). در صورتی كه كنترل سرويس دهنده فرزند عنصر form در صفحه باشد ، می توان از گرامر زير به منظور مراجعه به كنترل در اسكريپت های سمت سرويس گيرنده استفاده نمود .
<document.forms[0].TextBox1.value = "New value"; |
گرامر واقعی مورد نياز برای مراجعه به يك كنترل سرويس دهنده به نوع كنترل و اين كه آيا كنترل فرزند كنترل ديگری است ، بستگی خواهد داشت .
مراجعه به كنترل ها ئی كه درون ساير كنترل ها قرار دارند
مثلا" می توان يك خصلت ItemTemplate را در كنترل DataList ايجاد و يك كنترل Checkbox را به آن اضافه نمود كه مقدار ID آن CheckEnabled در نظر گرفته شده باشد . در زمان تفسير كنترل DataList ، يك كنترل جديد CheckEnabled برای هر آيتم داده در نظر گرفته می شود . صفحه تفسير شده نمی بايست شامل چندين نمونه از يك عنصر با نام CheckEnabled باشد ، بنابراين كنترل DataList يك شناسه منحصربفرد برایهر يك از كنترل های فرزند خود ايجاد می نمايد .
شناسه های منحصربفرد برای كنترل های فرزند يك naming container با بررسی دو خصلت توليد می گردند . برای هر كنترل فرزند :
• خصلت UniqueID كنترل به عنوان خصلت name در نظر گرفته می شود .
• خصلت ClientID كنترل به عنوان خصلت Id در نظر گرفته می شود .
هم ClientID و هم UniqueID بر اساس خصلت ID اوليه توليد می گردند تا اطلاعات لازم به منظور تضمين منحصربفرد بودن نتايج در يك صفحه تامين گردد .از مقدار ClientID كه در واقع ID عنصر تفسير شده است ، می توان در اسكريپت های سمت سرويس گيرنده استفاده نمود . پس از اجرای يك صفحه حاوی يك naming container و مشاهده Source آن ، می توان ID توليد شده برای هر يك از كنترل های فرزند را مشاهده نمود .
{{Fullname}} {{Creationdate}}
{{Body}}