انواع مدل كدينگ در ASP. NET 2.0

پس از عرضه ASP.NET 2.0 ، تغييرات گسترده ای در خصوص نحوه كدينگ برنامه های‌ وب ايجاد گرديد . پياده كنندگان برنامه های وب كه از فناوری فوق برای پياده سازی برنامه های وب استفاده می نمايند ، می بايست با اين تغييرات و دستاوردهای آن به خوبی آشنا شوند تا بتوانند برنامه هائی را ايجاد نمايند كه ظاهر و باطن آنها با استفاده از آخرين فناوری های موجود پياده سازی شده باشد .
دوشنبه، 7 بهمن 1387
تخمین زمان مطالعه:
موارد بیشتر برای شما
انواع مدل كدينگ در ASP. NET 2.0
انواع مدل كدينگ در ASP. NET 2.0
انواع مدل كدينگ در ASP. NET 2.0

پس از عرضه ASP.NET 2.0 ، تغييرات گسترده ای در خصوص نحوه كدينگ برنامه های‌ وب ايجاد گرديد . پياده كنندگان برنامه های وب كه از فناوری فوق برای پياده سازی برنامه های وب استفاده می نمايند ، می بايست با اين تغييرات و دستاوردهای آن به خوبی آشنا شوند تا بتوانند برنامه هائی را ايجاد نمايند كه ظاهر و باطن آنها با استفاده از آخرين فناوری های موجود پياده سازی شده باشد .
به دليل اهميت اين موضوع بر آن شديم كه در سه مقاله جداگانه با گزينه های موجود برای كدينگ يك صفحه وب آشنا شويم و به چندين پرسش اساسی در اين رابطه پاسخ دهيم . در اولين بخش ، پس از بررسی اجمالی برخی نكات اوليه و مهم كه بيشتر جنبه يادآوری دارد به بررسی انواع مدل كدينگ در ASP.NET 2.0 خواهيم پرداخت .

يادآوری !

پياده كنندگان برنامه های وب كه از فناوری ASP. NET برای توليد محتويات پويا استفاده می كنند ، برای پياده سازی برنامه های خود می توانند از ابزارهای مختلفی استفاده نمايند . در اكثر وب سايت های بزرگ برای توليد برنامه های وب از ويژوال استوديو استفاده می گردد . اين ابزار پياده سازی حرفه ای ، شامل مجموعه ای غنی از ابزارهای طراحی ، امكانات گسترده جهت اشكال زدائی و تسهيلات كمكی مناسب در زمان كدينگ است .
ويژوال استوديو ، همچنين ازمدل code-behind حمايت می نمايد كه در آن كد از تگ ها و ساير علائم نشانه گذاری موجود در يك صفحه وب تفكيك می گردد .
برای ايجاد يك برنامه در ويژوال استوديو 2005 به دو پتانسيل سطح بالا نياز است :
• كمپايلر كه مسئوليت بررسی كد نوشته شده و ترجمه آن به يك كد سطح پائين تر را برعهده دارد ( در اين مورد خاص ، ترجمه به IL ) .
• IDE ( برگرفته شده از Integrated Development Environment ) كه به پياده كنندگان امكان نوشتن كد مورد نياز برای ايجاد يك برنامه وب را می دهد .
برای پياده سازی يك برنامه وب ASP.NET ، بكارگيری ويژوال استوديو دات نت يك الزام نيست و پياده كنندگان می تواند برای كدينگ برنامه خود از يك برنامه ويرايشگر ( نظير notepad ) نيز استفاده نمايند .
در زمان پياده سازی يك برنامه وب ، ارائه تسهيلات لازم برای كدينگ از جمله خواسته های مشترك تمامی پياده كنندگان است تا آنان بتوانند صرفنظر از ميزان توانمندی ، سرود خلاقيت خود را آنچنان كه بايسته و شايسته است به گوش مخاطبان برسانند . شايد به همين دليل باشد كه ويژوال استوديو دات نت برای پياده كنندگان برنامه های وب ASP.NET ، به عنوان اولين گزينه ابزار پياده سازی مطرح می گردد .
با جداسازی ابزارهای پياده سازی و كمپايلر ها اين امكان در اختيار پياده كنندگان گذاشته شده است كه هر يك از ابزار مورد علاقه خود برای پياده سازی برنامه های وب ASP.NET استفاده نمايند و در ادامه اقدام به ترجمه آن نمايند .
به همراه دات نت كمپايلرهای متعددی ارائه شده است :
• كمپايلر ويژوال بيسيك ( فايل vbc.exe )
• كمپايلر #C ( فايل csc.exe )
• كمپايلر JScript ( فايل jsc.exe )
• كمپايلر #J ( فايل vjc.exe )
در صورتی كه قصد استفاده از برنامه های مترجم فوق را بطور دستی داشته می باشيم ، می توان آنها را از طريق خط دستور فعال كرد . كمپايلرهای فوق در آدرس c:\[WinDir]\Microsoft.NET\[Version] قرار دارند كه در آن WinDir ، دايركتوری محل نصب سيستم عامل ( نظير c:\windows ) و Version شماره نسخه دات نت نصب شده بر روی كامپيوتر است ( نظير v2.0.50215 ) .
استفاده از كمپايلرهای دات نت بطور دستی توصيه نمی گردد چراكه در چنين مواردی می بايست فايل مورد نظر جهت ترجمه و ساير اسمبلی های مورد نياز را مشخص نمود . همچنين لازم است تمامی برنامه را ترجمه و يا هر صفحه را بطور جداگانه ترجمه نمود . برای پيشگيری از اين نوع مسائل جانبی و مشكل ساز ، اكثر پياده كنندگان از امكانات حمايتی تعبيه شده برای ترجمه صفحات در ويژوال استوديو استفاده می نمايند .
در ASP.NET 1.x ، ويژوال استوديو تمامی صفحات وب را در يك اسمبلی DLL ترجمه می كرد . در ويژوال استوديو 2005 ، رويكرد فوق تغيير يافته است و به ASP.NET اجازه داه می شود كه برای هر صفحه در اولين مرتبه دستيابی ، ترجمه را انجام دهد . سياست فوق باعث شده است كه سرعت اشكال زدائی افزايش يافته و پياده كنندگان بتوانند وب سايت هائی پياده سازی نمايند كه در آنها صفحات وب با زبان های مختلفی نوشته شده باشند .

انواع مدل كدينگ

برای كدينگ صفحات وب و سرويس های وب می توان از دو مدل مختلف استفاده كرد :
• Inline code : اين مدل به صفحات كلاسيك ASP نزديك تر است و در آن تمامی كد به همراه تگ های Html در يك فايل aspx . ذخيره می گردد . كد مورد نياز در يك و يا چندين بلاك اسكريپت قرار می گيرد . با قرار دادن كدها در يك بلاك اسكريپت ، در صورتی كه در محيط ويژوال استوديو كار می كنيم همچنان امكان استفاده از پتانسيل هائی نظير اشكال زدائی و IntelliSense ، تعامل با رويدادها و استفاده از برنامه های جانبی وجود خواهد داشت . اين مدل به سهولت قابل استفاده است چراكه همه چيز در يك پكيچ نگهداری می گردد و برای كدينگ صفحات وب ساده مناسب است .
• code-Behind : در اين مدل هر صفحه ASP.NET در دو فايل جداگانه نگهداری می گردد. اولين فايل كه به فايل markup موسوم است شامل تگ های Html و تگ های كنترل های مختص ASP.NET است كه دارای انشعاب aspx . است . دومين فايل ، شامل كد مورد نياز با توجه به اهداف عملياتی يك صفحه وب است . اين فايل با توجه به اين كه از چه زبانی برای نوشتن كدها استفاده شده است دارای انشعاب متفاوتی خواهد بود . به عنوان نمونه در صورتی كه برای كدينگ از زبان VB.NET استفاده شده باشد ، انشعاب اين فايل vb . و در صورتی كه از زبان #C استفاده شده باشد ، انشعاب آن cs. خواهد بود . مدل فوق سازماندهی بهتری را ارائه می نمايد و بخش رابط كاربر را از منطق برنامه نويسی مجزا می نمايد . اين وضعيت خصوصا" در مواردی كه قصد پياده سازی صفحات وب پيچيده را داشته باشيم ، بسيار مفيد و موثر خواهد بود . در ويژوال استوديو 2005 پياده سازی مدل code-behind تغيير يافته است ولی فلسفه كلی كار با نسخه های قبلی تا حدود زيادی مشابه است .
در NET 1.x. ابزار طراحی استفاده شده برای پياده سازی ، نوع مدل كدينگ را مشخص می كرد . در ويژوال استوديو شما دارای آزادی عمل در خصوص انتخاب هر يك از گزينه های فوق می باشيد . زمانی كه يك صفحه وب جديد را به وب سايت خود اضافه می نمايد ، با انتخاب و يا عدم گزينش Place Code in Separate File می توان در اين رابطه تصميم گرفت .
در يك پروژه و يا برنامه وب می توان از دو مدل فوق استفاده كرد . شكل 1 ، نحوه عمليات فوق را نشان می دهد ( انتخاب گزينه Web site و در ادامه Add New Item )
مثال
برای آشنائی بيشتر با روش Inline code و يا code-Behind يك نمونه مثال را با يكديگر بررسی می نمائيم .
روش كدينگ Inline code : همه چيز در يك فايل و با نام TestInlineCode.aspx خلاصه شده است. كد زير نحوه انجام اين كار را نشان می دهد .

روش  Inline code : فايل TestInlineCode.aspx

<%@ Page Language="VB" %>

<script runat="server">
  Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
     Label1.Text = "Current time: " & DateTime.Now.ToLongTimeString()
  End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
  <title>Test Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
   <asp:Label ID="Label1" runat="server" Text="Click Me!"> </asp:Label>
   <br />
   <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</div>
</form>
</body>
</html>

روش code-behind : در اين مدل از دو فايل استفاده شده است : فايل TestCodeBehind.aspx كه شامل تگ های html و تگ های كنترل های مختص ASP.NET است و بخش رابط كاربر برنامه را تشكيل می دهد و فايل TestCodeBehind.aspx.vb كه حاوی كد مورد نياز صفحه وب با توجه به اهداف عملياتی است .
كد زير محتويات فايل TestCodeBehind.aspx را نشان می دهد .

روش  Inline code : فايل TestInlineCode.aspx

<%@ Page Language="VB" %>

<script runat="server">
  Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
     Label1.Text = "Current time: " & DateTime.Now.ToLongTimeString()
  End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
  <title>Test Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
   <asp:Label ID="Label1" runat="server" Text="Click Me!"> </asp:Label>
   <br />
   <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</div>
</form>
</body>
</html>

كد زير محتويات فايل TestCodeBehind.aspx.vb را نشان می دهد .

روش code-behind  : فايل TestCodeBehind.aspx.vb

Partial Class TestCodeBehind
  Inherits System.Web.UI.Page
  Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
       Label1.Text = "Current time: " & DateTime.Now.ToLongTimeString()
  End Sub
End Class

در كلاس صفحه ( TestCodeBehind ) ، تمامی متدهای صفحه تعريف می گردند .

جمع بندی

• مدل code-behind برای صفحات پيچيده ترجيح داده می شود.
• با اين كه مدل inline code برای صفحات كوچك ، فشرده و مناسب تر به نظر می آيد ولی همزمان با رشد كد و Html برای بسياری از پياده كنندگان راحت تر است كه با دو بخش فوق بطور جداگانه سروكار داشته باشند .
• در مدل code-behind با توجه به اين كه دقيقا" مشخص می گردد كه چه كلاسی ايجاد شده است و از چه namespace استفاده شده است ، شاهد شفافيت بيشتری در كد خواهيم بود.
• در مدل code-behind می توان اين امكان را در اختيار يك طراح وب قرار داد كه صرفا" بخش رابط كاربر را ايجاد و يا تصحيح نمايد ، بدون اين كه لازم باشد وی به كد برنامه دستيابی داشته باشد .

روش های ترجمه در ASP.NET 2.0

ASP.NET به همراه خود يك مدل ترجمه را ارائه داده است كه در آن اسمبلی ها به صورت پويا ترجمه می گردند . برنامه همواره به عنوان يك نسخه ترجمه شده ( با هدف افزايش كارآئی ) اجراء می گردد .
ASP.NET از سه روش مختلف برای ترجمه برنامه های وب استفاده می كند :
• Classic precompilation : اين مدل ترجمه همزمان با عرضه اولين نسخه ASP.NET ارائه گرديد . در اين روش ، بخش هائی از وب سايت نظير فايل های code-behind و هر نوع اسمبلی مرجع ترجمه و بخش هائی ديگر نظير فايل های حاوی تگ (فايل های aspx . ، و ASMX ) در زمان اجراء و همزمان با اولين مرتبه درخواست ، بطور پويا ترجمه می شوند . از مدل فوق صرفا" به همراه مدل code-behind سنتی كه در آن صفحه واقعی از كلاس پايه ترجمه شده به ارث رسيده باشد ، می توان استفاده كرد.
در روش فوق ، فايل های code-behind به اسمبلی ترجمه و در دايركتوری bin / قرار می گيرند و فايل های aspx . بر اساس نياز و درخواست ترجمه می شوند .
• Dynamic compilation : اين مدل ترجمه همزمان با عرضه اولين نسخه ASP.NET 2.0 ارائه گرديد و در آن برنامه به همراه تمامی تگ ها و فايل های كد منبع بر روی سرويس دهنده وب بكارگرفته شده و ASP.NET بطور كامل ترجمه را به صورت پويا و on the fly انجام می دهد . ايجاد تغييرات در فايل های حاوی تگ ها و يا فايل های كد منبع به صورت on the fly از مهمترين ويژگی های روش فوق است . در چنين مواردی ، برنامه بطور اتوماتيك و پس از بروز هر گونه تغيير ترجمه می گردد .
با توجه به اين كه ترجمه پويا همزمان با اولين درخواست انجام می شود ، همواره برای پاسخ به اولين درخواست پس از اعمال تغيير در كد مدت زمان بيشتری نسبت به درخواست های بعدی صرف خواهد شد .
• Site precompilation : در ASP.NET 2.0 يك مدل جديد برای ترجمه precompilation ارائه شده است كه اجازه می دهد تمامی وب سايت را به باينری ترجمه كرد .
در اين روش می بايست قبل از بكارگيری يك پروژه در ابتدا آن را بطور كامل ترجمه نمود . در اين مدل تمامی فايل های code-behind ، صفحات aspx . ، فايل های Html ، منابع گرافيكی و ساير عناصر موجود در back-end به يك و يا چندين اسمبلی قابل اجراء ترجمه می گردند . مدل فوق ، دارای بالاترين سطح كارآئی و امنيت است ولی امكان تغيير محتويات وب سايت در زمان فعال بودن سايت را نمی دهد . اين مدل ، برای سايت هائی كه فركانس بهنگام سازی آنها اندك است و خواستار امنيت بالائی می باشند مناسب است .
در زمان ايجاد يك وب سايت جديد ، ASP.NET به صورت پيش فرض گزينه Dynamic compilation را انتخاب می نمايد . اين بدان معنی است كه تمامی كد و صفحات به عنوان فايل های حاوی كد و تگ بر روی سيستم فايل سرويس دهنده وب ذخيره می گردند و ASP.NET بطور اتوماتيك آنها را ترجمه خواهد كرد . در چنين مواردی ، پاسخ به اولين درخواست نيازمند صرف زمان بيشتری است تا ASP.NET بتواند تمامی صفحه را ترجمه نمايد .
برای site precompilation ، می بايست از يك ابزار جداگانه با نام aspnet_compiler.exe جهت ترجمه برنامه وب استفاده كرد. كمپايلر فوق در دايركتوری Microsoft .NET Framework قرار دارد و می بايست در ابتدا از آن بر روی ماشين تست و پياده سازی استفاده كرد و در ادامه خروجی را بر روی ماشين عملياتی بكار گرفت .
كمپايلر فوق چندين فايل را در دايركتوری مقصد ايجاد می نمايد . در صورتی كه دقيق تر محتويات يكی از فايل های aspx . را بررسی نمائيم ، مشاهده خواهيم كرد كه فايل فوق حاوی هيچگونه تگ مفيدی نمی باشد و صرفا" شامل اطلاعات زیر است :

 "This is a marker file generated by the precompilation tool, and should not be deleted!"

تمامی كد واقعی و تگ ها به باينری ترجمه و در دايركتوری Bin قرار داده می شوند . پس از اين كار می توان محتويات و ساختار دايركتوری ايجاد شده را بر روی ماشين مقصد بكار گرفت و دايركتوری فوق را به عنوان دايركتوری مجازی پيكربندی تا شرايط اجرای برنامه فراهم گردد .

مفهوم page class در ASP.NET

پس از درخواست يك صفحه ASP.NET از سرويس دهنده و به منظور پاسخ گوئی به كاربران، می بايست در سمت سرويس دهنده پردازش های متعددی صورت پذيرد . كدی كه در سمت سرويس دهنده اجراء می گردد منحصرا" كدی نيست كه توسط پياده كننده ايجاد شده است . در مقابل ، ASP.NET در زمان اجراء يك و يا چندين كلاس را كه دقيقا" عمليات مورد نظر را انجام خواهد داد توليد و ترجمه می نمايد .
يك صفحه ASP.NET به عنوان يك unit اجراء و شامل عناصر سمت سرويس دهنده موجود در صفحه ( نظير كنترل ها ) و كد مربوط به event-handlers است كه توسط پياده كننده نوشته شده است . پياده كنندگان مجبور نيستند كه صفحات را از قبل به اسمبلی ترجمه نمايند . ASP.NET بطور پويا صفحات را ترجمه و آنها را در اولين مرتبه ای كه توسط يك كاربر درخواست می گردند ، ترجمه می نمايد . در صورتی كه در صفحه و ساير منابع مربوط به آن تغييراتی ايجاد شده باشد ، صفحه بطور اتوماتيك مجددا" ترجمه می گردد .
كلاس و يا كلاس هائی كه توسط كمپايلر ايجاد می گردد به نوع كدينگ ( مدل Inline code و يا code-behind ) بستگی دارد .

مدل Inline code

در اين مدل ، تگ ها و عناصر سمت سرويس دهنده به همراه كد مربوط به event-handler در يك فايل با انشعاب aspx . قرار می گيرد . كمپايلر يك كلاس جديد را كه مشتق شده از كلاس page و يا يك كلاس پايه سفارشی تعريف شده توسط خصلت Inherits دايركتيو Page@ را توليد و ترجمه می نمايد .
مثلا" در صورتی كه دارای يك صفحه وب ASP.NET با نام SamplePage1 در فهرست ريشه برنامه وب باشيم ، يك كلاس جديد با نام ASP.SamplePage1_aspx از كلاس Page مشتق می گردد . برای صفحات موجود در فولدرهای برنامه ، از نام فولدر به عنوان بخشی در نام كلاس توليد شده استفاده می گردد . كلاس توليد شده شامل تعاريف كنترل های موجود در صفحه aspx .، كد های سفارشی و event handlers است .
پس از توليد صفحه ، كلاس ايجاد شده به يك اسمبلی ترجمه و پس از استقرار در application domain ، امكان اجرای آن به منظور توليد خروجی مورد نظر جهت ارسال برای مرورگر فراهم می گردد . در صورتی كه در صفحه تغييراتی داده شود كه بر روی كلاس توليد شده تاثير بگذارد ( نظير افزودن كنترل های جديد و تغيير در كد ) ، كلاس ترجمه شده غيرمعتبر شده و يك كلاس جديد ايجاد می گردد .
شكل 1 ، مدل توارث برای page class در صفحات وب ASP.NET كه از مدل inline code ( يا تك فايل ) استفاده می كنند را نشان می دهد .

صفحات code-Behind

در مدل code-Behind ، تگ های صفحه به همراه عناصر سمت سرويس دهنده ( شامل تعاريف كنترل ها ) در يك فايل aspx . ذخيره می گردند و كد صفحه در يك فايل جداگانه ديگر قرار می گيرد . فايل حاوی كد شامل يك partial class است (تعريف يك كلاس با استفاده از كليد واژه Partial ) . وپژگی فوق اين موضوع را به اثبات می رساند كه فايل فوق صرفا" شامل بخشی از تمام كدی است كه كلاس كامل صفحه را ايجاد می نمايد . در partial class ، كد مورد نياز برنامه كه عمدتا" شامل event handlers است به آن اضافه می گردد ( امكان اضافه كردن متدها و يا خصلت هائی ديگر با توجه اهداف عملياتی يك صفحه نيز وجود دارد ) .
مدل توارث برای صفحات code-behind نسبت به صفحات Inline code از پيچيدگی بيشتری برخوردار است :
• فايل code-Behind شامل يك partial class است كه از كلاس پايه صفحه به ارث می رسد . كلاس پايه صفحه می تواند كلاس Page و يا كلاس ديگری باشد كه از كلاس Page مشتق شده است.
• فايل aspx . شامل يك خصلت Inherits در دايركتيو Page@ است كه به كلاس partial مربوط به code-behind اشاره می نمايد .
• پس از ترجمه صفحه ، ASP.NET يك partial class را بر اساس فايل aspx . ايجاد می نمايد . اين كلاس ، يك partial class از فايل كلاس code-behind است . فايل partial class توليد شده شامل تعاريف كنترل های صفحه است . اين partial class فايل code-behind را قادر می سازد كه به عنوان بخشی از يك كلاس كامل و بدون الزام پياده كنندگان به تعريف صريح كنترل ها استفاده گردد.
• در نهايت ، ASP.NET كلاس ديگری را توليد كه از كلاس توليد شده در مرحله سوم به ارث رسيده است . اين كلاس توليد شده جديد شامل كد مورد نياز برای ايجاد صفحه است . كلاس توليد شده فوق و كلاس code-behind درون يك اسمبلی ترجمه تا پس از اجراء خروجی مورد نياز جهت ارسال برای مرورگر را توليد نمايد .
برای بسياری از علاقه مندان و پياده كنندگان برنامه های وب 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 ايجاد و تگ كنترل را نيز بر اساس آن تنظيم می نمايد .
ويژوال استوديو دانت 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 ترجيح داده می شود چراكه از مشاهده متد توسط ساير كلاس ها پيشگيری به عمل می آيد ) .




نظرات کاربران
ارسال نظر
با تشکر، نظر شما پس از بررسی و تایید در سایت قرار خواهد گرفت.
متاسفانه در برقراری ارتباط خطایی رخ داده. لطفاً دوباره تلاش کنید.
مقالات مرتبط
موارد بیشتر برای شما
ویژگی های استخر ویژه کودکان
ویژگی های استخر ویژه کودکان
حفاظت از وسایل قیمتی در سفر
حفاظت از وسایل قیمتی در سفر
جمع‌آوری ۴ میلیارد تومان توسط کاربران «اپلیکشن بله» در پویش ایران همدل طی ۲۵ روز
جمع‌آوری ۴ میلیارد تومان توسط کاربران «اپلیکشن بله» در پویش ایران همدل طی ۲۵ روز
پاسخ موشکی حزب‌الله به حملات صهیونیست‌ها قبل آغاز آتش‌بس
play_arrow
پاسخ موشکی حزب‌الله به حملات صهیونیست‌ها قبل آغاز آتش‌بس
گزارش حسینی‌بای از لحظات آغاز آتش‌بس در لبنان
play_arrow
گزارش حسینی‌بای از لحظات آغاز آتش‌بس در لبنان
تشریح آتش‌بس در لبنان
play_arrow
تشریح آتش‌بس در لبنان
انفجار در نزدیکی محل بازی فوتبال خداداد و شمسایی در لبنان
play_arrow
انفجار در نزدیکی محل بازی فوتبال خداداد و شمسایی در لبنان
رئیس دادگستری تهران: حکم پروندۀ چای دبش تا پایان ماه صادر می‌شود
play_arrow
رئیس دادگستری تهران: حکم پروندۀ چای دبش تا پایان ماه صادر می‌شود
مهاجرانی: قرار نیست مردم را غافلگیر کنیم
play_arrow
مهاجرانی: قرار نیست مردم را غافلگیر کنیم
شیادی که با هک صفحۀ دختران از آن‌ها اخاذی می‌کرد دستگیر شد
play_arrow
شیادی که با هک صفحۀ دختران از آن‌ها اخاذی می‌کرد دستگیر شد
حقوق سال آیندۀ کارمندان و بازنشستگان چگونه محاسبه می‌شود؟
play_arrow
حقوق سال آیندۀ کارمندان و بازنشستگان چگونه محاسبه می‌شود؟
وزیر نیرو: خاموشی در هیچ نقطه‌ای از کشور اعمال نمی‌شود
play_arrow
وزیر نیرو: خاموشی در هیچ نقطه‌ای از کشور اعمال نمی‌شود
سقط جنین از مافیا گذشته و به صنعت تبدیل شده
play_arrow
سقط جنین از مافیا گذشته و به صنعت تبدیل شده
مجری سابق فاکس‌نیوز: شیطان کاخ سفید را اداره می‌کند
play_arrow
مجری سابق فاکس‌نیوز: شیطان کاخ سفید را اداره می‌کند
محمد گلریز در دیدار با رهبر معظم انقلاب: امیدوارم سرود پیروزی را در مسجد الاقصی بخوانم
play_arrow
محمد گلریز در دیدار با رهبر معظم انقلاب: امیدوارم سرود پیروزی را در مسجد الاقصی بخوانم