رويدادها در برنامه های وب دات نت

يک برنامه در مدت زمان حيات خود با رويدادهای متعددی مواجه می گردد. پس از بروز رويداد ، روتين پاسخگو مسئوليت برخورد با رويداد محقق شده را برعهده خواهد گرفت . برنامه های وب نيز از اين قاعده مستثنی نبوده و در مدت زمان حيات خود با رويدادهای متعددی مواجه می گردند . رويدادها و نحوه برخورد با آنان دربرنامه های وب ، دارای تفاوت هائی نسبت به برنامه های ويندوز است . رويدادها در برنامه های وب در سه
شنبه، 28 دی 1387
تخمین زمان مطالعه:
موارد بیشتر برای شما
رويدادها در برنامه های وب دات نت
رويدادها در برنامه های وب دات نت
رويدادها در برنامه های وب دات نت

يک برنامه در مدت زمان حيات خود با رويدادهای متعددی مواجه می گردد. پس از بروز رويداد ، روتين پاسخگو مسئوليت برخورد با رويداد محقق شده را برعهده خواهد گرفت . برنامه های وب نيز از اين قاعده مستثنی نبوده و در مدت زمان حيات خود با رويدادهای متعددی مواجه می گردند . رويدادها و نحوه برخورد با آنان دربرنامه های وب ، دارای تفاوت هائی نسبت به برنامه های ويندوز است . رويدادها در برنامه های وب در سه سطح : برنامه ، صفحات و کنترل های سرويس دهنده ، محقق می گردند. ترتيب و نحوه اجرای رويدادها ، تاثيری مستقيم بر نحوه پاسخگوئی به آنان توسط کدهای نوشته شده در يک برنامه دارد. در اين مقاله قصد داريم به بررسی جايگاه و نقش رويدادها در چرخه حيات يک برنامه وب پرداخته و از اين رهگذر با تفاوت های موجود بين چرخه حيات يک برنامه وب و يک برنامه ويندوز بيشتر آشنا شويم .

رويداد ها در چرخه حيات يک برنامه وب

حيات يک برنامه وب ، وابسته و متاثر از Session های فعال می باشد . ماداميکه Session فعال وجود داشته باشد ، برنامه وب نيز به زندگی خود ادامه خواهد داد . فرم های وب ، دارای عمر بسيار اندک و ناچيزی می باشند. يک برنامه وب با درخواست صفحه شروع آن توسط مرورگر ، زندگی خود را آغاز می نمايد . در ادامه ، سرويس دهنده وب وارد عمليات شده و يک فايل اجرائی ( فايلی با پسوند DLL ) را اجراء می نمايد . هدف نهائی فايل فوق ، پاسخگوئی به درخواست ارسالی توسط مرورگر است . برنامه فوق ، در ادامه يک نمونه از فرم وب درخواست شده را ايجاد و HTML لازم بمنظور پاسخ دادن به درخواست را توليد و در نهايت پاسخ مربوطه را برای مرورگر ارسال می نمايد . پس از اتمام فرآيند فوق ، نمونه فرم ايجاد شده نيز از بين خواهد رفت .
زمانيکه مرورگر دارای تگ های HTML توليده شده می باشد ، کاربر قادر به ورود اطلاعات و داده مورد نظر در Text boxs ، انتخاب دکمه ها و انجام ساير عمليات می باشد . وضعيت فوق ، تا زمانيکه يک رويداد Post-back محقق گردد ( نظير کليک نمودن بر روی يک دکمه ) ، ادامه می يابد . پس از محقق شدن رويداد Post-back ، مرورگر داده همراه صفحه ( View State ) را برای سرويس دهنده ارسال تا پردازش های لازم با توجه به رويداد محقق شده ، انجام شود. زمانيکه سرويس دهنده ، View State ( داده همراه با يک صفحه ) را دريافت می نمايد ، يک نمونه جديد از فرم وب را ايجاد و داده آن را با استفاده از View State تکميل و متناسب با رويداد محقق شده ، پردازش های لازم را انجام خواهد داد . پس از اتمام عمليات توسط سرويس دهنده ، نتايج بصورت تگ های HTML مجددا" برای مرورگر ارسال و نمونه فرم وب ايجاد شده ، از بين خواهد رفت .
زمانيکه کاربر به عمليات خود خاتمه داده و مرورگر را غير فعال می نمايد ، Session مربوط به آن نيز خاتمه می يابد . درصورتيکه Session های متعلق به ساير کاربران وجود نداشته باشد ، به حيات برنامه نيز خاتمه داده می شود ( عملا" وضعيت فوق کمتر اتفاق می افتد ) . ASP.NET با استفاده از garbage collection ، مديريت حافظه را انجام می دهد ( سرويس ارائه شده توسط CLR فريمورک دات نت ) . در فرآيند فوق ، سرويس دهنده بصورت ادواری رديابی مراجعات به اشياء را انجام و در صورتيکه از يک شی مدت زمان زيادی استفاده نشده باشد ، شی مربوطه از حافظه حذف و فضای استفاده شده توسط آن نيز آزاد می گردد . با توجه به ماهيت عمليات فوق ، نمی توان بطور دقيق از زمان محقق شدن رويداد Application_End ، آگاهی يافت .

نگهداری داده در يک فرم وب

با توجه به اينکه فرم های وب دارای عمر بسيار کوتاهی می باشند ، ASP.NET عمليات خاصی را بمنظور نگهداشت داده درج شده در کنترل های موجود بر روی يک فرم وب، انجام می دهد. داده های درج شده در کنترل ها ، پس از هر درخواست ارسال شده و از طريق Page_init مجددا" در کنترل های مربوطه، بازيابی ( Restore) می گردند. داده موجود در اين نوع کنترل ها در ادامه و از طريق رويداد Page_Load در دسترس قرار خواهند گرفت . داده ئی را که ASP.NET بين هر يک از درخواست ها ، نگهداری می نمايد ، view state فرم وب ناميده شده و صرفا" در محدوده همان فرم وب ، قابل دستيابی و استفاده است. بمنظور استفاده از داده ورودی در يک فرم وب برای ساير فرم های وب ، نيازمند ذخيره سازی داده در يک متغير وضعيت از نوع اشياء Application و يا Session می باشيم . اشياء فوق ، دو سطح متفاوت از بعد دستيابی را ارائه می نمايند :
• متغيرهای Application state . متغيرهای فوق ، برای تمامی کاربران قابل دسترس و استفاده می باشند. رفتار اين نوع متغيرها نظير متغيرهای سراسری با قابليت دستيابی چندکاربره می باشد. تمامی Sessions قادر به خواندن و نوشتن اين نوع متغيرها ، می باشند .
• متغيرهای Session state . متغيرهای فوق، صرفا" برای يک Session ( کاربر) قابل دسترس و استفاده می باشند. عملکرد اين نوع از متغيرها نظير داده های سراسری در يک برنامه استاندارد ويندوز می باشد . صرفا" Session فعال ، قابليت دستيابی به وضعيت Session خود را دارا خواهد بود .
متغيرهای Session و Application ، بصورت On the fly و از طريق کد نوشته شده در برنامه ، ايجاد می گردند ( عدم استفاده از روش های متداول بمنظور تعريف يک متغير ). در نمونه برنامه زير ، يک متغير Session با نام Clicks تعريف شده است . متغير فوق ، تعداد دفعاتی که بر روی دکمه Button1 کليک می گردد را در خود ذخيره و در نهايت مقدار مورد نظر در خروجی نمايش داده می شود .

VB.NET

Private Sub Button1_Click ( ByVal sender As System.Object , _
                    ByVal e As System.EventArgs ) Handles Button1.Click
     Session ( "Clicks") = Session ( "Clicks") + 1
     Response.Write("Number of Clicks : " & Session( "Clicks")
End Sub


در يک متغير وضعيت ( Session , Application) می توان هر نوع داده ئی را ذخيره نمود. ( از يک عدد صحيح ساده تا يک شی ) . با توجه به اينکه عملکرد متغيرهای وضعيت ، نظير داده های سراسری می باشد ، می بايست ،استراتژی لازم بمنظور استفاده و انجام عمليات بر روی آنان ،مشخص گردد .

رويدادهای Session و Application

برنامه نويسان می توانند کد دلخواه خود را بمنظور پاسخگوئی به رويدادهای Session و يا Application نوشته و آنان را در فايل Global.asax مستقر نمايند . از رويدادهای Application بمنظور مقداردهی اشياء و داده ئی که قصد استفاده از آن توسط تمامی Session های فعال در برنامه وب وجود داشته باشد ، استفاده می گردد . از رويدادهای Session بمنظور مقداردهی اوليه داده ئی که قصد نگهداشت آن بين Session های خاصی وجود دارد، استفاده می گردد . ( قصد استفاده از اين نوع متغيرها بين Session های متفاوت وجودندارد ) .
رويدادهای Application ، بشرح زير می باشند :
• Application_Start : رويداد فوق ، بلافاصله پس از ملاقات صفحه شروع برنامه توسط اولين کاربر ، محقق می گردد .
• Application_End ، رويداد فوق ،زمانی محقق می گردد که کاربری به برنامه متصل ( مرتبط) نباشد.
• Application_BeginRequest : رويداد فوق ، در ابتدای هر در خواست ارسالی برای سرويس دهنده ، محقق می گردد . با حرکت بين صفحات و درخواست آنان از سرويس دهنده ، يک درخواست ايجاد و متناسب با آن ، رويداد فوق نيز محقق می گردد .
• Applicatino_EndRequest : رويداد فوق ، پس از اتمام هر درخواست ارسال شده برای سرويس دهنده ، محقق می گردد .
• Session_Start : رويداد فوق ، زمانيکه کاربری جديد ، صفحه شروع يک برنامه را ملاقات می نمايد ، محقق می گردد .
• Session_End : رويداد فوق ، پس از ترک برنامه توسط يک کاربر ، محقق می گردد( بستن مرورگر و يا پس از Time out تعريف شده )
در فرم های وب ، يک Session ، نمونه ای منحصربفرد از مرورگر می باشد .يک کاربر می تواند دارای چندين نسخه در حال اجراء از برنامه مرورگر بر روی ماشين خود باشد .در چنين وضعيتی ، در صورتيکه هر يک از مرورگرها با برنامه وب ارتباط برقرار نمايد ، هريک از آنان دارای Session منحصربفرد مربوط به خود خواهند بود .
بمنظور آشنائی با عملکرد رويدادهای فوق ، کد نوشته شده زير را در فايل Global.asax مربوط به يک پروژه فرم وب ، مستفر نمائيد .

 

VB.NET

Sub Application_Start ( ByVal Sender As  Object , ByVal E As EventArgs )
        Application ( "AppCount") = Application ( "AppCount") + 1
End Sub
Sub Session_Start ( ByVal Sender As  Object , ByVal E As EventArgs )
        Application ( "SessCount" ) =  Application ( "SessCount" ) + 1
        Response.Write( "Number of  AppCount : " & Application  ("AppCount")   & "<br>" )
        Response.Write( "Number of  SessCount : " & Application ( "SessCount" ) & "<br>" )
End Sub
Sub Session_End ( ByVal Sender As  Object , ByVal E As EventArgs )
        Application ( "SessCount" ) =  Application ( "SessCount" ) - 1
End Sub


پس از اجرای کد فوق ، هر نمونه از مرورگر که به برنامه متصل گردد ،يک واحد به Session ، اضافه می گردد ( مقدار شمارنده Application همچنان يک باقی خواهد ماند ) . لازم است به اين نکته نيز اشاره گردد که اشياء ذاتی نظير Session و Response در Application_Start قابل دسترس نمی باشند .

رويدادهای فرم های وب

با استفاده از رويدادهای فرم های وب می توان پردازش و پشتيبانی از داده استفاده شده در يک صفحه وب ، پاسخگوئی به نسبت دهی داده (ِData binding ) و برخورد با موارد استثناء ( Handle exceptions ) را در يک صفحه وب ، انجام داد. Page_Load و Page_Error از جمله رويدادهائی می باشند که از آنان در اغلب برنامه ها ، استفاده می گردد . رويدادهای مرتبط با فرم های وب ( بترتيب محقق شدن )، بشرح زير می باشند .
• Page_Init : رويداد فوق ، زمانی محقق می گردد که کنترل های سرويس دهنده ، در حافظه مستقر و از طريق view state مربوط به فرم وب ، مقداردهی اوليه گردند. (اولين مرحله در چرخه حيات يک فرم وب ).
• Page_Load : رويداد فوق ، زمانی محقق می گردد که کنترل ها ی سرويس دهنده در شی Page ، لود می گردند. اطلاعات view state ، در اين لحظه قابل دسترس و استفاده بوده و می توان در اين محل تنظيمات کنترلی لازم بمنظور نمايش متن بر روی صفحه را انجام داد ( انجام تغييرات مورد نظر).
• Page_PreRender : رويداد فوق ، زمانی محقق می گردد که برنامه درصدد Render نمودن شی Page می باشد .
• Page_Unload : رويداد فوق ، پس از خروج Page از حافظه ، محقق می گردد.
• Page_Error : رويداد فوق ، پس از مواجه شدن با يک مورد خاص و استثنائی ،محقق می گردد .
• Page_AbortTransaction : رويداد فوق ، پس از توقف يک تراکنش ، محقق می گردد.
• Page_CommitTransaction : رويداد فوق ، پس از پذيرش يک تراکنش ، محقق می گردد.
• Page_DataBinding : رويداد فوق ، پس از نسبت دهی يک کنترل سرويس دهنده به يک منبع داده بر روی يک صفحه ، محقق می گردد.
• Page_Dispose : رويداد فوق ،پس از آزاد سازی يک شی Page از حافظه ، محقق می گردد (آخرين رويداد مرتبط با چرخه حيات يک شی Page ) .
از رويداد Page_Load بهمراه خصلت IsPostBack ، می توان بمنظور مقداردهی اوليه داده ، در اولين مرتبه ای که کاربران يک فرم وب را مشاهده می نمايند ، استفاده نمود.

رويدادهای کنترل سرويس دهنده

هر يک از کنترل های سرويس دهنده ، نظير دکمه ها ، TextBox و DropDownList ، دارای مجموعه ای اختصاصی از رويدادهای مرتبط با خود بمنظور پاسخگوئی به عمليات کاربران می باشند . تمامی رويدادهای کنترل سرويس دهنده بطور يکسان ايجاد نمی گردند . سه نوع عمده از رويدادهای کنترل سرويس دهنده وجود دارد :
• رويدادهای Post-Back : رويدادها ی فوق ، باعث ارسال صفحه وب برای سرويس دهنده بمنظور انجام پردازش های ضروری می گردند. اين نوع از رويدادها ، ترافيکی را بين سرويس گيرنده و سرويس دهنده ، ايجاد می نمايند ( توجه به اثرات ترافيک ايجاد شده بر کارآئی برنامه ) .
• رويدادهای Cached : اين نوع از رويدادها ، در View state مربوط به صفحه ذخيره تا زمانيکه يک رويداد Post_Back محقق گردد .
• رويدادهای Validation : رويدادهای فوق ، بدون اينکه ضرورتی به انجام Post-Back و يا Cache وجود داشته باشد ، از طريق امکانات پيش بينی شده درون صفحه ، با آنان برخورد خواهد شد .کنترل های سرويس دهنده Validation از رويدادهای فوق ،استفاده می نمايند .
کنترل های Validation ، قبل از اينکه صفحه برای سرويس دهنده Post-Back شوند، بررسی می گردند . زمانيکه Post-Back محقق می گردد ، رويدادهای Page_init و Page_Load ، پردازش و در ادامه رويدادهای Cache و نهايتا" رويدادی که باعث Post-Back شده است ، پردازش می گردد . کنترل های Button ، Link Button ,Image Button ، از جمله کنترل هائی می باشند که باعث تحقق يک رويداد Post-Back ، می گردند . کنترل های . TextBox,DropDownList,ListBox,RadioButton و CheckBox ، باعث ايجاد رويدادهائی از نوع Cache خواهند شد .
فرض کنيد ، يک فرم وب بهمراه چهار TextBox و يک دکمه OK بر روی آن را داشته باشيم . در چنين حالتی ، اگر TextBox خالی بماند ، و دکمه OK کليک گردد ، RequiredFieldValidator نمايش داده شده و رويداد ديگری پردازش نشده و صفحه برای سرويس دهنده PostBack نخواهد شد. درصورتيکه مقداری در TextBox درج و دکمه OK فعال گردد ، صفحه PostBack شده و رويداد TextChanged ، قبل از رويداد Click محقق می گردد. برنامه زير واکنش لازم را در اين راستا انجام خواهد داد ( کليک بر روی دکمه Button1 و يا تغيير مقدار TextBox1 ).

 

VB.NET

Private Sub Button1_Click ( ByVal sender As System.Object ,_
  ByVal e As System.EventArgs ) Handles Button1.Click
      Response.Write( "Button Clicked! <Br>")
End Sub
Private Sub TextBox1_TextChanged ( ByVal sender As System.Object ,_
ByVal e As System.EventArgs ) Handles TextBox1.TextChanged
      Response.Write( "Text has Changed <Br>")
End Sub





نظرات کاربران
ارسال نظر
با تشکر، نظر شما پس از بررسی و تایید در سایت قرار خواهد گرفت.
متاسفانه در برقراری ارتباط خطایی رخ داده. لطفاً دوباره تلاش کنید.
مقالات مرتبط