جستجو در محصولات

گالری پروژه های افتر افکت
گالری پروژه های PSD
جستجو در محصولات


تبلیغ بانک ها در صفحات
ربات ساز تلگرام در صفحات
ایمن نیوز در صفحات
.. سیستم ارسال پیامک ..
انواع مدل كدينگ در ASP. NET 2.0
-(2 Body) 
انواع مدل كدينگ در ASP. NET 2.0
Visitor 507
Category: دنياي فن آوري
پس از عرضه 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 ترجيح داده مي شود چراكه از مشاهده متد توسط ساير كلاس ها پيشگيري به عمل مي آيد ) .
Add Comments
Name:
Email:
User Comments:
SecurityCode: Captcha ImageChange Image