PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : انواع مدل کدینگ در asp. Net 2.0



آبجی
15th February 2010, 01:39 AM
نویسنده : شرکت سخاروش

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

یادآوری !
پیاده کنندگان برنامه های وب که از فناوری ASP. NET برای تولید محتویات پویا استفاده می کنند ، برای پیاده سازی برنامه های خود می توانند از ابزارهای مختلفی استفاده نمایند . در اکثر وب سایت های بزرگ برای تولید برنامه های وب از ویژوال استودیو استفاده می گردد . این ابزار پیاده سازی حرفه ای ، شامل مجموعه ای غنی از ابزارهای طراحی ، امکانات گسترده جهت اشکال زدائی و تسهیلات کمکی مناسب در زمان کدینگ است .
ویژوال استودیو ، همچنین ازمدل code-behind حمایت می نماید که در آن کد از تگ ها و سایر علائم نشانه گذاری موجود در یک صفحه وب تفکیک می گردد .
برای ایجاد یک برنامه در ویژوال استودیو ۲۰۰۵ به دو پتانسیل سطح بالا نیاز است :


کمپایلر که مسئولیت بررسی کد نوشته شده و ترجمه آن به یک کد سطح پائین تر را برعهده دارد ( در این مورد خاص ، ترجمه به 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 ترجمه می کرد . در ویژوال استودیو ۲۰۰۵ ، رویکرد فوق تغییر یافته است و به ASP.NET اجازه داه می شود که برای هر صفحه در اولین مرتبه دستیابی ، ترجمه را انجام دهد . سیاست فوق باعث شده است که سرعت اشکال زدائی افزایش یافته و پیاده کنندگان بتوانند وب سایت هائی پیاده سازی نمایند که در آنها صفحات وب با زبان های مختلفی نوشته شده باشند .

انواع مدل کدینگ
برای کدینگ صفحات وب و سرویس های وب می توان از دو مدل مختلف استفاده کرد :


Inline code : این مدل به صفحات کلاسیک ASP نزدیک تر است و در آن تمامی کد به همراه تگ های Html در یک فایل aspx . ذخیره می گردد . کد مورد نیاز در یک و یا چندین بلاک اسکریپت قرار می گیرد . با قرار دادن کدها در یک بلاک اسکریپت ، در صورتی که در محیط ویژوال استودیو کار می کنیم همچنان امکان استفاده از پتانسیل هائی نظیر اشکال زدائی و IntelliSense ، تعامل با رویدادها و استفاده از برنامه های جانبی وجود خواهد داشت . این مدل به سهولت قابل استفاده است چراکه همه چیز در یک پکیچ نگهداری می گردد و برای کدینگ صفحات وب ساده مناسب است .

code-Behind : در این مدل هر صفحه ASP.NET در دو فایل جداگانه نگهداری می گردد. اولین فایل که به فایل markup موسوم است شامل تگ های Html و تگ های کنترل های مختص ASP.NET است که دارای انشعاب aspx . است . دومین فایل ، شامل کد مورد نیاز با توجه به اهداف عملیاتی یک صفحه وب است . این فایل با توجه به این که از چه زبانی برای نوشتن کدها استفاده شده است دارای انشعاب متفاوتی خواهد بود . به عنوان نمونه در صورتی که برای کدینگ از زبان VB.NET استفاده شده باشد ، انشعاب این فایل vb . و در صورتی که از زبان #C استفاده شده باشد ، انشعاب آن cs. خواهد بود . مدل فوق سازماندهی بهتری را ارائه می نماید و بخش رابط کاربر را از منطق برنامه نویسی مجزا می نماید . این وضعیت خصوصا” در مواردی که قصد پیاده سازی صفحات وب پیچیده را داشته باشیم ، بسیار مفید و موثر خواهد بود . در ویژوال استودیو ۲۰۰۵ پیاده سازی مدل code-behind تغییر یافته است ولی فلسفه کلی کار با نسخه های قبلی تا حدود زیادی مشابه است .



در NET 1.x. ابزار طراحی استفاده شده برای پیاده سازی ، نوع مدل کدینگ را مشخص می کرد . در ویژوال استودیو شما دارای آزادی عمل در خصوص انتخاب هر یک از گزینه های فوق می باشید . زمانی که یک صفحه وب جدید را به وب سایت خود اضافه می نماید ، با انتخاب و یا عدم گزینش Place Code in Separate File می توان در این رابطه تصمیم گرفت .
در یک پروژه و یا برنامه وب می توان از دو مدل فوق استفاده کرد . شکل ۱ ، نحوه عملیات فوق را نشان می دهد ( انتخاب گزینه Web site و در ادامه Add New Item )

http://www.srco.ir/Articles/images/ASPNET2-Coding-01.jpg
شکل ۱ : اتخاذ تصمیم در خصوص نوع مدل کدینگ

مثال
برای آشنائی بیشتر با روش 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 را نشان می دهد .




روش code-behind : فایل TestCodeBehind.aspx
<%@ Page Language=”VB” AutoEventWireup=”true“ CodeFile=”TestCodeBehind.aspx.vb” Inherits=”TestCodeBehind” %>
<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 ) ، تمامی متدهای صفحه تعریف می گردند .

جمع بندی
<li dir="rtl"> مدل code-behind برای صفحات پیچیده ترجیح داده می شود.
<li dir="rtl"> با این که مدل inline code برای صفحات کوچک ، فشرده و مناسب تر به نظر می آید ولی همزمان با رشد کد و Html برای بسیاری از پیاده کنندگان راحت تر است که با دو بخش فوق بطور جداگانه سروکار داشته باشند .
<li dir="rtl"> در مدل code-behind با توجه به این که دقیقا” مشخص می گردد که چه کلاسی ایجاد شده است و از چه namespace استفاده شده است ، شاهد شفافیت بیشتری در کد خواهیم بود.
در مدل code-behind می توان این امکان را در اختیار یک طراح وب قرار داد که صرفا” بخش رابط کاربر را ایجاد و یا تصحیح نماید ، بدون این که لازم باشد وی به کد برنامه دستیابی داشته باشد .

آبجی
15th February 2010, 01:40 AM
روش های ترجمه در 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 ، امکان اجرای آن به منظور تولید خروجی مورد نظر جهت ارسال برای مرورگر فراهم می گردد . در صورتی که در صفحه تغییراتی داده شود که بر روی کلاس تولید شده تاثیر بگذارد ( نظیر افزودن کنترل های جدید و تغییر در کد ) ، کلاس ترجمه شده غیرمعتبر شده و یک کلاس جدید ایجاد می گردد .
شکل ۱ ، مدل توارث برای page class در صفحات وب ASP.NET که از مدل inline code ( یا تک فایل ) استفاده می کنند را نشان می دهد .

http://www.irandevelopers.com/wp-content/uploads/2008/11/aspnet2-coding-2.jpg (http://www.irandevelopers.com/wp-content/uploads/2008/11/aspnet2-coding-2.jpg)
شکل ۱ : مدل توارث page class در 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 درون یک اسمبلی ترجمه تا پس از اجراء خروجی مورد نیاز جهت ارسال برای مرورگر را تولید نماید .


شکل ۲ مدل توارث برای page class در یک صفحه وب ASP.NET که از مدل code-Behind استفاده می کند را نشان می دهد .
http://www.irandevelopers.com/wp-content/uploads/2008/11/aspnet2-coding-03.jpg (http://www.irandevelopers.com/wp-content/uploads/2008/11/aspnet2-coding-03.jpg)
شکل ۲ : مدل توارث page class در code-Behin

آبجی
15th February 2010, 01:40 AM
برای بسیاری از علاقه مندان و پیاده کنندگان برنامه های وب 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 ایجاد و تگ کنترل را نیز بر اساس آن تنظیم می نماید .


شکل ۱ ، نحوه ارتباط رویداد Button.Click را با متد Button_Click در یک page class نشان می دهد .

http://www.irandevelopers.com/wp-content/uploads/2008/11/aspnet2-coding-4.jpg (http://www.irandevelopers.com/wp-content/uploads/2008/11/aspnet2-coding-4.jpg)
شکل ۱ : نحوه ارتباط رویداد Button.Click با متد Button_Click
ویژوال استودیو دانت ۲۰۰۵ از یک ویژگی با نام 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 ترجیح داده می شود چراکه از مشاهده متد توسط سایر کلاس ها پیشگیری به عمل می آید ) .

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد