|
عنوان
|
نويسنده
|
مشاهده
|
تعداد
آراء |
امتياز
|
|
انواع مدل كدينگ در ASP. NET 2.0 ( بخش سوم ) |
مديريت وب |
4006 |
4 |
4.8 |
مدل كدينگ در ASP. NET 2.0
انواع
مدل كدينگ در ASP. NET 2.0
( بخش سوم )
در
بخش اول
پس از بيان برخی مفاهيم اساسی برنامه های وب به انواع مدل كدينگ در
ASP.NET 2.0 و در
بخش دوم
به روش های ترجمه و
مفهوم page class در ASP.NET
2.0 اشاره گرديد. در بخش سوم و نهائی برخی از پرسش های متداول در رابطه
با انواع مدل كدينگ در ASP.NET
را بررسی و سعی خواهيم كرد كه برای آنها پاسخی مناسب ارائه دهيم .
برای بسياری از علاقه مندان و پياده كنندگان برنامه های وب
ASP. NET پرسش های متعددی در رابطه با ماهيت مدل كدينگ در
ASP. NET مطرح می شود . اهم اين پرسش ها عبارتند از :
-
چگونه فايل های
code-behind به صفحات مرتبط می شوند ؟
-
چگونه تگ های كنترل به
متغيرهای صفحه تبديل می شوند ؟
-
چگونه رويدادها به Event Handler مرتبط می شوند ؟
چگونه فايل های
code-behind به صفحات مرتبط می شوند ؟
هر صفحه aspx . با يك دايركتيو صفحه شروع می شود .
دايركتيو فوق علاوه بر اين كه زبان برنامه نويسی استفاده شده برای كدينگ صفحه را مشخص
می نمايد ، به
ASP. NET اعلام می نمايد كه از چه مكانی
كد مرتبط با صفحه را پيدا نمايد . با
توجه به اين كه در زمان استفاده از روش inline code
، كد به همراه تگ های html و تگ های مختص كنترل های
ASP. NET در يك فايل مشابه قرار می گيرد ، دايركتيو
اشاره شده سخن خاصی در خصوص مكان كد مرتبط با صفحه را نخواهد داشت .
برای مشخص كردن
مكان كد مرتبط با صفحه از چندين روش مختلف می توان
استفاده كرد . در نسخه های قبلی
ASP. NET ، از خصلت src
كه به فايل كد منبع
اشاره می نمايد و
يا خصلت Inherits
برای مشخص كردن نام كلاس ترجمه شده استفاده می گرديد . هر يك از روش های فوق دارای
چالش های مختص به خود می باشند . به عنوان نمونه ، در مواردی كه از خصلت Inherits
استفاده می گرديد ، پياده كنندگان
مجبور به ترجمه كامل كد قبل از بكارگيری نهائی آن می باشند . اين موضوع باعث بروز مشكلات عديده ای برای پياده كنندگان می گرديد (
خصوصا" در گروه های پياده كننده
، چراكه گزينه استاندارد
، ترجمه هر صفحه در يك
اسمبلی DLL است ) . مشكل واقعی هر دو روش فوق ، الزام
پياده كنندگان به تعريف هر يك از كنترل های وب مورد نياز به
عنوان يك
member variable است .
در ASP. NET 2.0 ، با استفاده از يك
ويژگی جديد با نام partial class اين نوع مشكلات
برطرف شده است . ويژگی فوق به پياده كنندگان اجازه می دهد يك كلاس را به چندين فايل
كد منبع تقسيم نمايند . در واقع ، عملكرد روش فوق مشابه مدل های قبلی است با اين
تفاوت كه تعاريف كنترل ها به سمت يك فايل جداگانه هدايت شده است . پياده كنندگان
لازم نيست نگران اين فايل باشند و برای دستيابی به كنترل های صفحه وب می توان از
اسامی آنها استفاده كرد .
قطعا" تاكنون واژه partial را
در تعريف كلاس برای كد صفحه وب مشاهده كرده ايد .
|
Partial
Class TestCodeBehind
Inherits System.Web.UI.Page
...
End
Class |
با تغيير اندك در زيرساخت
ASP. NET ، به سادگی يك صفحه
aspx . با فايل كد منبع
توسط خصلت
CodeFile مرتبط می گردد .
|
<%@
Page
Language="VB"
AutoEventWireup="true"
CodeFile="TestCodeBehind.aspx.vb"
Inherits="TestCodeBehind"
%> |
چگونه تگ
های كنترل به متغيرهای صفحه
مرتبط می گردند ؟
پس از درخواست يك صفحه aspx .
در يك مرورگر ، ASP. NET در آغاز سعی می نمايد كه كد
فايل مرتبط با صفحه درخواستی را پيدا نمايد . در ادامه برای هر كنترلی كه دارای
خصلت runat= server است يك تعريف متغير را توليد می
نمايد .
فرض كنيد كه در صفحه aspx . دارای يك
كنترل text box به صورت زير
باشيم :
|
<asp:TextBox
ID="txtInput" runat="server"/> |
ASP. NET ، در ادامه
تعريف
member variable زير
را توليد و آن را
با استفاده از كلاس های partial به
page class ملحق می نمايد
.
|
Protected
System.Web.UI.TextBox txtInput |
برای حصول اطمينان از
اين موضوع كه سيستم به درستی كار می كند ، می بايست فايل aspx
. و فايل vb. همسان
گردند . در صورتی كه
اسامی كنترل ها را با استفاده از ابزاری نظير يك ويرايشگر متن تغيير
داده باشيم ، لينك
مورد نظر از بين رفته و كد مورد نظر كمپايل نخواهد شد .
توجه داشته باشيد كه
متغيرهای كنترل همواره با كليد واژه قابليت دستيابی پذيری
protected تعريف می گردند . علت
اين موضوع به روش توارث
استفاده شده در
ASP.NET ( مدل كدينگ صفحه ) برمی گردد .
روش انجام اين كار به صورت زير است :
-
در ابتدا ،
page class از كتابخانه كلاس دات نت قابليت های اوليه را تعريف و به يك صفحه وب اجازه می
دهد ساير كنترل ها را هاست نمايد
و خود را به
Html تفسير و امكان دستيابی به اشياء سنتی ASP
نظير Request ، Response و
Session را فراهم نمايد .
-
كلاس code-behind از كلاس صفحه به ارث می
رسد تا
بتواند توانمندی های اوليه صفحه وب
ASP. NET
را فراهم نمايد .
-
در نهايت ، صفحه aspx . از
طريق كلاس صفحه سفارشی از كد استفاده می نمايد . اين موضوع باعث می شود كه صفحه فوق بتواند رابط كاربر را با
كدی كه آن را حمايت می نمايد ، تركيب نمايد .
عملكرد متغيرهای protected مشابه متغيرهای
private با يك تفاوت اساسی
است . اين نوع متغيرها قابل دستيابی
برای كلاس های مشتق شده می باشند .به عبارت ديگر
، استفاده از متغيرهای
protected در كلاس code-behind
اين اطمينان را ايجاد می نمايد كه متغيرها در كلاس صفحه مشتق شده قابل دستيابی
باشند . اين موضوع به
ASP. NET اجازه می دهد كه متغيرهای كنترل را در زمان اجراء به تگ های كنترل مرتبط نمايد .
چگونه
رويدادها به Event Handler مرتبط می شوند ؟
اكثر كد نوشته شده در يك صفحه
ASP. NET درون event handlers قرار می گيرند تا بتوانند به رويدادهای كنترل های وب واكنش
نشان دهند . در ويژوال استوديو دات نت ، با استفاده از سه روش
زير می توان يك event handler را اضافه كرد :
-
تايپ دستی آن :
در اين روش می توان متد
مورد نظر را مستقيما" در كلاس صفحه اضافه كرد . در چنين مواردی لازم است كه
پارامترهای ضروری دقيقا" مشخص گردند تا
signature مربوط به event handler با signature رويداد
مورد نظر مطابقت نمايد . همچنين لازم است كه تگ كنترل ويرايش گردد تا
بتواند به event handler مربوطه به درستی مرتبط گردد .
-
Double-click بر روی يك
كنترل در حالت Design view
: در
اين حالت ، ويژوال استوديو يك
event handler برای رويداد پيش فرض كنترل را ايجاد
می نمايد . به عنوان مثال در صورتی كه بر روی صفحه
double-click گردد ،
event handler مربوط به
Page_Load ايجاد می گردد .
همچنين ، در صورتی كه بر روی يك كنترل
button ، كليك (double-click) گردد، ويژوال استوديو
بطور اتوماتيك رويداد Click را
برای آن ايجاد خواهد كرد .
-
انتخاب رويداد از طريق
پنجره Properties :
در اين روش پس از انتخاب كنترل
از طريق پنجره Properties
می توان رويداد مورد نظر را انتخاب نمود.
در ادامه ، ليستی از رويدادهای ارائه شده توسط كنترل
مورد نظر نمايش داده می شوند . با double-click
بر روی رويداد مورد نظر می توان آن را انتخاب نمود . ويژوال استوديو بطور اتوماتيك
event handler را در page class ايجاد و تگ كنترل را نيز بر اساس آن تنظيم می نمايد
.
شكل 1 ، نحوه ارتباط رويداد Button.Click را
با متد Button_Click در يك page
class نشان می دهد .

شكل 1 : نحوه ارتباط رويداد Button.Click با متد Button_Click
ويژوال استوديو
دانت 2005 از يك ويژگی با نام automatic event wire-up استفاده می
نمايد( در دايركتيو صفحه مشخص می گردد).
اين ويژگی از دو اصل كلی زير
تبعيت می نمايد :
-
تمامی
event handlers صفحه
بطور اتوماتيك و بر اساس نام
event handler مرتبط می شوند . به عبارت ديگر ، متد page_Load
بطور اتوماتيك و در زمان استقرار صفحه در حافظه صدا زده می شود .
-
تمامی
event handlers كنترل از طريق خصلت های مربوطه
در تگ كنترل مرتبط می گردند . خصلت مورد نظر دارای نام مشابه رويداد است كه دارای
پيشوند
on است .
به عنوان مثال ، در صورتی كه
قصد برخورد با رويداد Click مربوط به كنترل
Button را داشته باشيم ، می بايست خصلت OnClick
در تگ كنترل را به نام event handler مورد نظر مقداردهی نمود . كد زير نحوه انجام
اين كار را نشان م دهد :
|
<asp:Button id="cmdOK"
OnClick="cmdOK_Click" runat="server"> |
كنترل های
ASP. NET همواره از گرامر فوق استفاده می نمايند . بخاطر
داشته باشيد با توجه به اين كه
ASP. NET می بايست به
event handler مرتبط گردد ، كلاس صفحه مشتق شده می بايست قادر به
دستيابی به كلاس code-behind باشد . اين بدان معنی است
كه event handlers می بايست به همراه كليد واژه های Protected
و يا Public تعريف شوند ( protected
ترجيح داده می شود
چراكه از مشاهده متد توسط ساير كلاس ها پيشگيری به عمل می آيد ) .