رويدادها در برنامه های وب دات نت
رويداد ها در چرخه حيات يک برنامه وب
زمانيکه مرورگر دارای تگ های HTML توليده شده می باشد ، کاربر قادر به ورود اطلاعات و داده مورد نظر در Text boxs ، انتخاب دکمه ها و انجام ساير عمليات می باشد . وضعيت فوق ، تا زمانيکه يک رويداد Post-back محقق گردد ( نظير کليک نمودن بر روی يک دکمه ) ، ادامه می يابد . پس از محقق شدن رويداد Post-back ، مرورگر داده همراه صفحه ( View State ) را برای سرويس دهنده ارسال تا پردازش های لازم با توجه به رويداد محقق شده ، انجام شود. زمانيکه سرويس دهنده ، View State ( داده همراه با يک صفحه ) را دريافت می نمايد ، يک نمونه جديد از فرم وب را ايجاد و داده آن را با استفاده از View State تکميل و متناسب با رويداد محقق شده ، پردازش های لازم را انجام خواهد داد . پس از اتمام عمليات توسط سرويس دهنده ، نتايج بصورت تگ های HTML مجددا" برای مرورگر ارسال و نمونه فرم وب ايجاد شده ، از بين خواهد رفت .
زمانيکه کاربر به عمليات خود خاتمه داده و مرورگر را غير فعال می نمايد ، Session مربوط به آن نيز خاتمه می يابد . درصورتيکه Session های متعلق به ساير کاربران وجود نداشته باشد ، به حيات برنامه نيز خاتمه داده می شود ( عملا" وضعيت فوق کمتر اتفاق می افتد ) . ASP.NET با استفاده از garbage collection ، مديريت حافظه را انجام می دهد ( سرويس ارائه شده توسط CLR فريمورک دات نت ) . در فرآيند فوق ، سرويس دهنده بصورت ادواری رديابی مراجعات به اشياء را انجام و در صورتيکه از يک شی مدت زمان زيادی استفاده نشده باشد ، شی مربوطه از حافظه حذف و فضای استفاده شده توسط آن نيز آزاد می گردد . با توجه به ماهيت عمليات فوق ، نمی توان بطور دقيق از زمان محقق شدن رويداد Application_End ، آگاهی يافت .
نگهداری داده در يک فرم وب
• متغيرهای 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 , _ |
در يک متغير وضعيت ( Session , Application) می توان هر نوع داده ئی را ذخيره نمود. ( از يک عدد صحيح ساده تا يک شی ) . با توجه به اينکه عملکرد متغيرهای وضعيت ، نظير داده های سراسری می باشد ، می بايست ،استراتژی لازم بمنظور استفاده و انجام عمليات بر روی آنان ،مشخص گردد .
رويدادهای Session و Application
رويدادهای 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 ) |
پس از اجرای کد فوق ، هر نمونه از مرورگر که به برنامه متصل گردد ،يک واحد به Session ، اضافه می گردد ( مقدار شمارنده Application همچنان يک باقی خواهد ماند ) . لازم است به اين نکته نيز اشاره گردد که اشياء ذاتی نظير Session و Response در Application_Start قابل دسترس نمی باشند .
رويدادهای فرم های وب
• 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 ، می توان بمنظور مقداردهی اوليه داده ، در اولين مرتبه ای که کاربران يک فرم وب را مشاهده می نمايند ، استفاده نمود.
رويدادهای کنترل سرويس دهنده
• رويدادهای 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 ,_ |