با سلام به شما دوستان گرامی ، حالتون چطوره؟ خوبید؟ برای آشنایی با مباحث asp  ابتدا باید با چرخه حیات آشنا شوید. چرخه ی حیات / life cycle ASP.Net مشخص می کند که چگونه:
ASP.Net صفحات را برای تولید خروجی های پویا (dynamic output) پردازش می کند.

نرم افزار و صفحات آن نمونه سازی instantiate))  و پردازش شده اند.

ASP.Net صفحات را به صورت پویا ترجمه یا کامپایل می کند.

چرخه ی حیات ASP.Net به دو گروه تقسیم می شود:

Application life cycle (چرخه ی حیات برنامه)

page life cycle (چرخه ی حیات صفحه)

چرخه ی حیات برنامه (application life cycle)  ASP.Net :

چرخه ی حیات اپلیکیشن مراحل زیر را شامل می شود:

کاربر یک درخواست / request برای دسترسی به application resources (منابع برنامه ی کاربردی) می دهد، سپس صفحه ی مرورگر این درخواست را به سرور وب ارسال می کند.

یک pipeline (خط ارتباطی) یکپارچه و متحد الشکل request ها را دریافت کرده و به دنبال آن رخدادهای زیر روی می دهند:

یک شئ (object) از کلاس ApplicationManager ایجاد می شود.

یک شئ (نمونه از نوع شئ) از کلاس HostingEnvironment ایجاد می گردد و این شئ اطلاعاتی مربوط به منابع ارائه دهد.

آیتم های سطح بالا (top-level items) داخل برنامه ی کاربردی مورد نظر (application) کمپایل می شوند.

Response object ها ایجاد می شوند. Application object هایی از قبیل HttpContext, HttpRequest  و      HttpResponse ایجاد شده و مقدار دهی اولیه (initialize) می شوند.

نمونه (instance) ای از شئ HttpApplication ایجاد گردیده و به request (درخواست) تخصیص داده می شود. این request به وسیله ی کلاس HttpApplication پردازش می شود. برای اینکه کلاس نام برده request مورد نظر را پردازش کند، رخدادهای متفاوتی فعال (raise) می شوند.

چرخه ی حیات صفحه (page lifecycle) asp.net:

زمانی که یک صفحه درخواست (request) می شود، صفحه ی درخواست شده در حافظه ی سرور بارگذاری و پردازش شده و به مرورگر ارسال می گردد، سپس از حافظه ی سرور پاک می شود. هر یک از این مراحل، method ها (متد) و event هایی (رخداد) را شامل می شود که می توانند طبق نیاز اپلیکیشن مربوطه بازنویسی شوند(override).  به عبارت دیگر شما می توانید برای بازنویسی (override) کد پیش فرض کد خود را بنویسید (کد پیش فرض را بازنویسی کنید).

کلاس page یک hierarchical tree (نمودار درختی سلسله مراتبی) متشکل از همه ی کنترل های روی صفحه ایجاد می کند. همه ی کامپوننت های روی صفحه، به جز directive ها (یک سازه ی زبان یا language construct که تعیین می کند کامپایلر چگونه ورودی / input خود را پردازش کند)، قسمتی از این  control tree می باشند . می توانید با اضافه کردن trace= “true” به page directive  دستورات این control tree را مشاهده کنید.

مراحل مربوط به page lifecycle (چرخه ی حیات صفحه) به شرح زیر می باشند:

مقداردهی اولیه (initialization)

نمونه سازی اولیه ی (instantiation) کنترل ها روی صفحه

اجرای کدهای کنترل کننده ی رویدادها (Execution of the events handler codes)

Page rendering (بارگذاری یا نمایش صفحه)

درک page cycle در نوشتن کدهایی کمک می کند که برنامه نویس با نوشتن آن کدها می خواهد اتفاق خاصی در یک مرحله از page lifecycle (چرخه ی حیات صفحه) رخ دهد. این امر همچنین در نوشتن control های سفارشی یا اختصاصی، و مقدار دهی اولیه ی آنها در زمان درست کمک می کند، همچنین property (خصوصیت های) آنها را با داده های view-state پر کرده (populate) و control behavior code (کد کنترل عملکرد) را اجرا می کند.

در ادامه مراحل مختلف مربوط به یک صفحه یا page ASP.Net ارائه شده اند:

Page request (مرحله ی درخواست صفحه) – وقتی ASP.Net یک page request دریافت می کند، تصمیم می گیرد که آیا صفحه را تجزیه (parse) و کمپایل کند یا اینکه یک نسخه ی ذخیره شده (cached version) از پیج موجود می باشد، بر این اساس پاسخ فرستاده می شود.

آغاز چرخه ی حیات صفحه (start of the page lifecycle). در این مرحله اشیاء (object) request و response تنظیم و مقداردهی می شوند. چنانچه request، یک request قدیمی یا postback (اسمی است که به فرایند تحویل یک صفحه ی asp.net به سرور جهت پردازش، داده می شود) باشد, در آن صورت خاصیت IsPostBack بر روی مقدار true تنظیم می شود. همچنین خاصیت (property) UICulture صفحه تنظیم (مقدار دهی) می شود.

مقداردهی اولیه ی صفحه  (page initialization). در این مرحله با مقداردهی (set) خاصیت (property) UniqueID، به کنترل های روی صفحه ID (شناسه) های منحصر بفرد اختصاص داده شده و به دنبال آن تم های گرافیکی به control ها اعمال می شوند. برای یک درخواست جدید داده های postback بارگذاری شده وproperties  / control خاصیت های control ها در مقادیر view state ذخیره می شوند.

بارگذاری صفحه (page load) – در این مرحله خاصیت های control با استفاده از مقادیر view state و control state  تنظیم می شوند.

اعتبارسنجی (validation) – تابع اعتبارسنجی فراخوانی شده و پس از اجرای موفقیت آمیز اعتبار سنجی, خاصیت (property) IsValid صفحه یا page روی true تنظیم می شود (مقدار true به خاصیت isvalid تخصیص داده می شود).

Postback event handling (مدیریت رویداد postback) – در صورتی که درخواست یک postback باشد، event handler (مدیریت کننده ی رخداد) مربوطه فراخوانده (invoke) می شود.

Page rendering (بارگذاری و نمایش صفحه)- در این مرحله view state مربوط به صفحه و همه ی control ها ذخیره می شوند. صفحه / page متد render را ویژه ی تک تک control ها صدا زده و خروجی (output) فرایند اجرا و نمایش صفحه (rendering) را داخل کلاس OutputStreamِ خاصیت response صفحه را write می کند.

Unload(تخلیه بار)-  صفحه ی بارگذاری شده (rendered page)  به سرویس گیرنده (client) ارسال می شود و همچنین خاصیت های page (page properties) از قبیل Response و Request همگی unload شده و پاک می گردند.

رویدادهای ASP.Net page life cycle

در هر مرحله از چرخه ی حیات صفحه (page lifecycle event), صفحه رویداد هایی (event) را فعال می کند که می توان برای آن ها کد نوشت. event handler (کنترلگر یا مدیریت کننده ی رخداد) اساسا یک تابع (function) یا زیرروال (subroutine) مقید یا متصل به رویداد (event) می باشد که از خصیصه های اعلانی یا تعریف کننده (declarative attributes) مانند onclick یا handle استفاده می کند.

ذیل رویدادهای مربوط به چرخه ی حیات صفحه (page lifecycle event) برای شما فهرست شده:

Prelnit: اولین رویداد در چرخه ی حیات صفحه می باشد، که خاصیت (property) IsPostBack را بررسی کرده و مشخص می کند که صفحه یک postback است یا خیر (این رویداد در حقیقت به شما اجازه می دهد وضعیت page request (درخواست صفحه) را بررسی کنید, برای مثال چک  کنید آیا صفحه ی مورد نظر در پاسخ به یک postback بارگذاری می شود یا خیر). Prelnit تم ها و master page (صفحات اصلی) را تنظیم و مقداردهی می کند، کنترل های پویا (dynamic controls) ایجاد می کند و همچنین به شما این امکان را می دهد مقادیر get و set خاصیت (property) را مقداردهی می کند.

Init: این رویداد control property را مقداردهی اولیه می کند، سپس control tree ساخته می شود ( این رویداد در واقع پس از اینکه server control مقداردهی اولیه شده باشد روی می دهد / فعال یا اجرا می شود.

InitComplete: این رویداد امکان مسیریابی view state را فراهم می کند. همه کنترل ها مسیریابی view-state را فعال می کنند (هنگامی روی می دهد که مقداردهی اولیه صفحه (page initialization) به اتمام رسیده باشد).

LoadViewState: این رویداد امکان بارگذاری اطلاعات view state را در control ها فراهم می کند.

LoadPostData: طی این مرحله تمام محتویات فیلدهای ورودی که با تگ <form> تعریف شده اند، پردازش می شوند.

PreLoad : قبل از اینکه داده های postback  در کنترل ها بارگذاری شوند، اجرا می شود. این رویداد می تواند با  overloading متد OnPreLoad یا ایجاد یک Page_PreLoad handler مدیریت شود.

Load: این رویداد در ابتدا برای صفحه (page) و سپس به صورت بازگشتی (recursive) برای همه کنترل ها (control) اجرا می شود. کنترل هایی در control tree ایجاد می شوند. این رویداد می تواند با اضافه بارگذاری (overload کردن) تابع OnLoad یا ایجاد یک Page_Load handler مدیریت شود.

LoadComplete: فرآیند بارگذاری تکمیل شده، control event handler ها اجرا شده و اعتبار سنجی صفحه (page validation) انجام می شود. این رویداد به وسیله ی اضافه بارگذاری (overload) متد OnLoadComplete یا ایجاد یک Page_LoadComplete handler مدیریت می شود.

PreRender: این رویداد درست قبل از اینکه خروجی render شود اجرا می گردد. با مدیریت این رویداد، صفحه ها و کنترل ها می توانند قبل از اجرا و نمایش (render) خروجی، هرگونه آپدیتی انجام دهند.

PreRenderComplete : از آنجایی که رخداد (event) PreRender به صورت بازگشتی (recursive) ویژه ی کلیه ی control های فرزند (child control) فعال واجرا می شوند، رخداد  PreRenderComplete از تکمیل مرحله ی pre-rendering اطمینان حاصل می کند (باعث می شود مرحله ی pre-rendering کامل اجرا شود).

SaveStateComplete: Control state در صفحه ذخیره می شود. همچنین personalization و اطلاعات مربوط به control state و view state ذخیره می گردند، علامت یا نشانه گذاری با HTML آغاز می شود. این مرحله را می توان با overload کردن متد render و یا ایجاد یک Page_Render handler مدیریت کرد.

UnLoad: این مرحله آخرین مرحله ازچرخه ی حیات صفحه (page lifecycle) می باشد. رویداد  UnLoad را در این مرحله برای همه ی کنترل ها به صورت بازگشتی (recursive) و درآخر برای خود صفحه اجرا (فعال) می کند. آخرین پاکسازی (cleanup) انجام شده و همه ی منابع (resources) و ارجاعات (reference)، از قبیل اتصالات به پایگاه داده آزاد می شوند. این رویداد به وسیله ی تعریف (modify کردن) متد OnUnLoad یا ایجاد یک Page_UnLoad handler مدیریت می شود.