پاسخ : انواع مدل کدینگ در ASP. NET 2.0 صفحات 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 استفاده می کند را نشان می دهد .
پاسخ : انواع مدل کدینگ در ASP. NET 2.0 برای بسیاری از علاقه مندان و پیاده کنندگان برنامه های وب ASP. NET پرسش های متعددی در رابطه با ماهیت مدل کدینگ در ASP. NET مطرح می شود . اهم این پرسش ها عبارتند از : چگونه فایل های code-behind به صفحات مرتبط می شوند ؟ چگونه تگ های کنترل به متغیرهای صفحه تبدیل می شوند ؟ چگونه رویدادها به Event Handler مرتبط می شوند ؟
پاسخ : انواع مدل کدینگ در ASP. NET 2.0 چگونه فایل های 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” %
پاسخ : انواع مدل کدینگ در ASP. NET 2.0 چگونه تگ های کنترل به متغیرهای صفحه مرتبط می گردند ؟ پس از درخواست یک صفحه aspx . در یک مرورگر ، ASP. NET در آغاز سعی می نماید که کد فایل مرتبط با صفحه درخواستی را پیدا نماید . در ادامه برای هر کنترلی که دارای خصلت runat= server است یک تعریف متغیر را تولید می نماید . فرض کنید که در صفحه aspx . دارای یک کنترل text box به صورت زیر باشیم : 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 اجازه می دهد که متغیرهای کنترل را در زمان اجراء به تگ های کنترل مرتبط نماید
پاسخ : انواع مدل کدینگ در ASP. NET 2.0 چگونه رویدادها به 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 ایجاد و تگ کنترل را نیز بر اساس آن تنظیم می نماید .
پاسخ : انواع مدل کدینگ در ASP. NET 2.0 ویژوال استودیو دانت ۲۰۰۵ از یک ویژگی با نام automatic event wire-up استفاده می نماید( در دایرکتیو صفحه مشخص می گردد). این ویژگی از دو اصل کلی زیر تبعیت می نماید : تمامی event handlers صفحه بطور اتوماتیک و بر اساس نام event handler مرتبط می شوند . به عبارت دیگر ، متد page_Load بطور اتوماتیک و در زمان استقرار صفحه در حافظه صدا زده می شود . تمامی event handlers کنترل از طریق خصلت های مربوطه در تگ کنترل مرتبط می گردند . خصلت مورد نظر دارای نام مشابه رویداد است که دارای پیشوند on است . به عنوان مثال ، در صورتی که قصد برخورد با رویداد Click مربوط به کنترل Button را داشته باشیم ، می بایست خصلت OnClick در تگ کنترل را به نام event handler مورد نظر مقداردهی نمود . کد زیر نحوه انجام این کار را نشان م دهد : nClick=”cmdOK_Click” runat=”server”> کنترل های ASP. NET همواره از گرامر فوق استفاده می نمایند . بخاطر داشته باشید با توجه به این که ASP. NET می بایست به event handler مرتبط گردد ، کلاس صفحه مشتق شده می بایست قادر به دستیابی به کلاس code-behind باشد . این بدان معنی است که event handlers می بایست به همراه کلید واژه های Protected و یا Public تعریف شوند ( protected ترجیح داده می شود چراکه از مشاهده متد توسط سایر کلاس ها پیشگیری به عمل می آید ) .