بررسی رويدادهای کنترل های سرويس دهنده New Page 1



ساير




 

 

 

SAKHA RAVESH CO.

 ا مروز

 سه شنبه  5  ارديبهشت  1396  2017  Apr.  25   Tuesday ToDay
صفحه اصلی  مقالات نکته هادايره المعارف خودآموزها | تازه ها خود آزمون ها    
  نسخه قابل چاپ  

    5 4 3 2 1 

 عنوان

 نويسنده

  مشاهده

 تعداد آراء

 امتياز

 برنامه نوِِيسی مبتنی بر رويداد در وب ( بخش دوم )

 مديريت وب

11044

8

3.2

با توجه به جایگاه داده در عصر حاضر و  لزوم نگاه جامع به این مقوله مهم ، بر آن شدیم تا محوریت فعالیت های خود را بر  روی این موضوع متمرکز نمائیم . از این رو گروه فابک با شعار فناوری اطلاعات برای کسب وکار شکل گرفت و  خدمات خود  را از طریق  سایت www.fabak.ir  به مخاطبان محترم عرضه می نماید

 

برنامه نوِِيسی مبتنی بر رويداد در وب ( بخش دوم )

برنامه نوِِيسی مبتنی بر رويداد در وب ( بخش دوم )
در بخش اول اين مقاله با مفهوم يک رويداد ، مدل برنامه نويسی مبتنی بر رويداد ، رويدادهای عمومی ASP.NET و رويدادهای HTML ،  آشنا شديم . در اين بخش به بررسی رويداد های کنترل های سرويس دهنده، خواهيم پرداخت .
ASP.NET ، همانند HTML امکان استفاده از رويدادهائی نظير OnClick و يا OnLoad را از طريق کنترل های سرويس دهنده ، فراهم می نمايد . برای نوشتن روتين های مرتبط با هر يک از رويدادها ، می توان از زبانهای مورد حمايت دات نت ، استفاده بعمل آورد. يکی از مهمترين مزايای استفاده از رويدادهای مرتبط با کنترل های سرويس دهنده و اجرای کد مرتبط با آنان بر روی سرويس دهنده ، عدم وابستگی برنامه به يک مرورگر خاص است . در رويدادهای HTML ، مرورگر دارای جايگاه خاص خود بوده و پاسخگوئی به رويدادها با توجه به پتانسيل های هر مرورگر ، انجام خواهد شد . در ASP.NET ، سرويس دهنده وب با رويدادها سروکار داشته و پس از انجام پردازش های لازم، نتايج عمليات به صورت HTML برای مرورگر ارسال می گردد.
به منظور نسبت دهی يک رويداد يه کنترل های سرويس دهنده ASP.NET ، می توان از روش مشابه کنترل های سمت سرويس گيرنده HTML ، استفاده بعمل آورد . کد زير ، نحوه نسبت دهی رويداد OnClick به کنترل Button را نشان می دهد :

<asp:Button  id="button1" text="تست رويدادها"   onClick = "ClickEventHandler" runat="server" />

ClickEventHandler ، نام روتين پاسخگو پس از بروز رويداد است  ( کليک نمودن بر روی Button ) .  نام روتين فوق ،  مستقيما" به روتينی با همين نام که در کدهای نوشته شده موجود می باشد ، map می گردد. در صورت عدم وجود روتين مشخص شده ، پس از بروز رويداد هيچگونه عمليات خاصی انجام نخواهد شد . کد موجود در روتين نوشته شده ، صرفا" زمانی اجراء خواهد شد که نام در نظر گرفته شده برای روتين پاسخگو با نام نسبت داده شده به کنترل سرويس دهنده ASP.NET ، مطابقت نمايد .

<Script Language ="vb" runat="server" >
   Sub ClickEventHandler ( Sender As Object  , E  As  EventArgs )
      ...
کد دلخواه ....
  End Sub
</Script>

در روتين فوق از دو آرگومان به اسامی Sender و E ، به منظور ارسال اطلاعات مورد نياز به روتين پاسخگو ، استفاده شده است . اولين آرگومان با نام Sender ، يک مرجع به شی ايجاد کننده رويداد را مشخص نموده و دومين پارامتر با نام E ، يک کلاس رويداد بوده که مسئوليت ذخيره اطلاعات با توجه به وضعيت رويدادی  که می بايست به آن پاسخ داده شود و ارسال يک شی مختص رويداد را برعهده دارد .
کنترل های سرويس دهنده ASP.NET در مقايسه با کنترل های HTML دارای مجموعه کمتری از رويدادها بوده  که می توان آنان را به عنوان خصلت هائی اضافه به کنترل ها نسبت داد.  رويدادهای مرتبط با کنترل های سرويس دهنده ASP.NET عبارتند از :

  • OnLoad ، رويداد فوق زمانی  محقق می گردد که کنترل ها درون يک پنجره و يا فريم،  لود گردند .
  • OnUnload : رويداد فوق زمانی محقق می گردد که يک کنترل از درون يک پنجره و يا فريم حذف گردد .
  • OnClick : رويداد فوق زمانی محقق می گردد که بر روی يک Button  ، کليک گردد .
  • OnInit : رويداد فوق زمانی که اولين مرتبه صفحه وب مقداردهی می گردد ، محقق می شود .
  • OnPrerender: رويداد فوق ، صرفا" قبل از ارائه يک کنترل ، محقق می گردد .

علاوه بر موارد فوق ، رويدادهای ديگری نظير  SelectIndexChanged و CheckChanged وجود دارد که توسط کاربر handle نمی شوند ( از طريق يک Event handler ). پس از ايجاد رويدادهای فوق ، ASP.NET در مقابل آنان واکنش مناسب را نشان خواهد داد . رويدادهای فوق ، زمانی که محتويات يک کنترل نظير يک CheckBox و يا يک ليست ، تغيير نمايند ، ايجاد شده و صرفا" بهمراه  کنترل های خاصی نظير List items و Checkbox بکار گرفته می شوند .

تفاوت بين کنترل های HTML و کنترل های سرويس دهنده ASP.NET
مهمترين تفاوت بين کنترل های HTML و کنترل های سرويس دهنده ASP.NET ، به نحوه برخورد با آنان برمی گردد . در کنترل های  HTML ، زمانی که يک رويداد محقق می گردد ، مرورگر مسئوليت برخورد با آن را برعهده خواهد داشت . در چنين شرايطی مرورگر در انتظار تحقق يک رويداد خواهد بود ( مثلا" کليک بر روی يک صفحه و يا  حرکت موس بر روی يک عنصر ). در کنترل های سرويس دهنده ASP.NET ، رويداد توسط مرورگر محقق می گردد ولی در مقابل اينکه وی با آن سروکار داشته باشد ، به سرويس دهنده اعلام نموده تا  وی با آن برخورد نمايد . صرفا" در زمانی که بر روی  کنترل Button سرويس دهنده ASP.NET ، کليک می شود يک رويداد Postback ايجاد و اطلاعات مورد نياز برای پردازش رويداد برای سرويس دهنده ، ارسال می گردند . بنابراين در موارديکه يک radio button و يا يک آيتم موجود در يک ليست توسط کاربری انتخاب می گردد ، اطلاعات ثبت و پس از تحقق رويداد OnClick برای سرويس دهنده ارسال خواهند شد .
امکان برخورد با برخی از رويدادها بر روی سرويس دهنده وجود نخواهد داشت ( نظير فشردن يک کليد و يا حرکت موس بر روی يک عنصر خاص )  بنابراين برای اين نوع از رويدادها، معادلی در ASP.NET ، وجود نخواهد داشت . رويدادهائی از اين نوع برای سرويس دهنده ارسال نخواهند شد و می بايست توسط سرويس گيرنده با آنان برخورد شود . علت اين امر بسيار ساده است :

  • در رويدادهای HTML ، مرورگر در انتظار کليک بر روی يک کنترل ، توسط کاربر است . انتظار فوق ، ممکن است ساعت ها بطول انجامد و عملا" صفحه ای در مرورگر فعال شده باشد که کاربر هيچگونه  عمليات خاصی را در ارتباط با آن انجام نمی دهد . اين وضعيت در ASP.NET بدين صورت نخواهد بود . همانگونه که اشاره گرديد ، پروتکل HTTP ، صرفا" امکان فعال نمودن يک ارتباط ، دريافت صفحه و در نهايت غيرفعال نمودن ارتباط ايجاد شده را فراهم می نمايد . سرويس دهنده نمی تواند يک نسخه از شی Page را برای سرويس دهنده فعال ( باز شده ) ، نگهداری نمايد. شی Page مقداردهی اوليه شده ، در حافظه مستقر و در ادامه پس از برخورد با رويداد های ايجاد شده ، از حافظه حذف می گردد .  تمامی عمليات فوق در مدت زمان چند ثانيه و يا ميلی ثانيه انجام می شود . اين امر نشان می دهد که چرا صرفا" می توان به تعداد اندکی از رويدادها با استفاده از کدهای نوشته سمت سرويس دهنده ، پاسخ داد. مهمترين مزيت ارسال رويدادها برای سرويس دهنده ، ايجاد يک ساختار مناسب برای کدهای نوشته شده می باشد . بدين ترتيب می توان روتين ها و کدهای نوشته شده به منظور برخورد با رويدادها در يک برنامه ASP.NET را بطور کامل از يکديگر تفکيک نموده و برای آنان يک ساختار مناسب در نظر گرفت . در اين رابطه معايبی نيز وجود خواهد داشت : با افزايش حجم پردازش ها بر روی سرويس دهنده ، ترافيک عمليات افزايش يافته و کارآئی برنامه کاهش خواهد يافت . حتی المقدور می بايست سعی گردد که برای پاسخگوئی به يک رويداد از پردازش سمت سرويس گيرنده استفاده گردد.

کنترل سرويس دهنده Button
کنترل فوق ، يکی از کنترل های سرويس دهنده خاص در ASP.NET بوده که می توان از آن به منظور انجام واکنش لازم در زمان بروز يک رويداد استفاده بعمل آورد. عملکرد کنترل فوق مشابه در نظر گرفتن نوع Button برای تگ <input> در html است . فرمت کنترل button به صورت زير است :

<asp:Button  id="id-name"   Event = "Event_handler_Name" runat="server" />

به منظور استفاده ازکنترل فوق، می بايست يک رويداد مشخص گردد . کنترل Button صرفا" قادر به حمايت از رويدادهای زير می باشد:

  • OnInit
  • OnPrerender
  • OnLoad
  • OnClick
  • OnUnload

مثال  : در اين مثال قصد داريم با  نحوه استفاده از کنترل های سرويس دهنده ASP.NET  ، آشنا شويم .  در اين رابطه از سه کنترل سرويس دهنده ASP.NET استفاده شده است . اولين کنترل يک Checkbox است که از آن به منظور آگاهی از نقطه نظرات کاربر، دومين کنترل يک Button است که باعث بروز رويداد می شود و سومين کنترل، يک Label است. ( در ASP.NET امکان ايجاد جعبه ها ی محاوره ای وجود نداشته و د ر صورتی که قصد داشته باشيم اطلاعات را به صورت پويا نمايش دهيم از کنترل Label استفاده می شود) . در اين مثال از کاربر درخواست می شود که با انتخاب يک Checkbox اعلام نمايد که آيا تمايل به دريافت اطلاعاتی اضافه را دارد ؟ با توجه به انتخاب کاربر ، پيام مناسبی نمايش داده می شود.
مرحله اول : تايپ کد زير با استفاده از يک ويرايشگر

<script language="vb" runat="server">
Sub ClickHandler(Sender As Object, E As EventArgs)
 If ExtraInfoBox.Checked then
  Message.Text = "<br /><br /> بزودی اطلاعات تکميلی برای شما ارسال می گردد"
Else
  Message.Text = "<br /><br />شما اطلاعات تکميلی را دريافت نخواهيد کرد"
End If
End Sub
</script>
<html dir=rtl>
<head>
<title>تست رويدادها | پردازش های سمت سرويس دهنده</title>
</head>
<body>
<form runat="server">
  <asp:CheckBox id="ExtraInfoBox" Text="آيا علاقه مند به دريافت اطلاعات اضافه می باشيد؟" Runat="server" />
   <br /><br />
   <asp:Button id="Button1" Text="تست رويدادها" onclick="ClickHandler" runat="server"/>
   <asp:Label id="Message" runat="server"/>
</form>
</body>
</html>

مرحله دوم :  پس از ذخيره نمودن کد فوق در فايلی با نام TestEvent.aspx و مشاهده آن در مرورگر ، خروجی زير را خواهيم داشت : 

مرحله سوم : پس از انتخاب Checkbox و کليک بر روی دکمه "تست رويدادها " ، يک پيام مناسب نمايش داده می شود :

 توضيحات :

  • رويداد OnClick  پس از کليک بر روی دکمه " تست رويدادها " ، ايجاد و به دنبال آن يک پيام کوتاه نمايش داده می شود .

  •  روتين ClickHandler به رويداد OnClick ، مرتبط شده است .

  • روتين ClickHandler وضعيت CheckBox را بررسی و يک پيام مناسب را با توجه به وضعيت CheckBox در کنترل Label نمايش خواهد داد . کد روتين ClickHandler  :

<script language="vb" runat="server">
Sub ClickHandler(Sender As Object, E As EventArgs)
 If ExtraInfoBox.Checked then
  Message.Text = "<br /><br /> بزودی اطلاعات تکميلی برای شما ارسال می گردد"
Else
  Message.Text = "<br /><br />شما اطلاعات تکميلی را دريافت نخواهيد کرد"
End If
End Sub
</script>

  • کد فوق يک پيام مناسب را با توجه به محتويات کنترل سرويس دهنده  CheckBox ( با نام  ExtraInfoBox ) ، نمايش خواهد داد.

  • در اين مثال از يک رويداد اختصاصی ( کليک ) استفاده شده است . بنابراين ،  کد فوق صرفا" پس از کليک بر روی دکمه " تست رويدادها " ، اجراء خواهد شد .در صورتی که کاربر بر روی دکمه فوق کليک ننمايد ، هيچگونه اتفاق خاصی نخواهد افتاد.

  •  در رويدادهائی نظير Page_Init  و Page_Load ، ضرورتی به استفاده از پارامترها وجود ندارد، چراکه در اين رابطه  نيازی به ارسال اطلاعات برای روتين مربوطه ، وجود نخواهد داشت. ولی در روتين ClickHandler از دو پارامتر استفاده شده است.

  • شايد اين سوال برای شما مطرح شده باشد که چرا رويدادها به پارامترها نياز دارند ؟ در پاسخ می بايست گفت که هر رويدادی که محقق می گردد ، اطلاعاتی در ارتباط با خود را نيز ايجاد می نمايد.(مثلا" کنترلی را که باعث ايجاد رويداد شده است ) . برای استفاده از اطلاعات فوق در روتين مربوطه ، می بايست اطلاعات مورد نظر را از طريق پارامتردر اختيار آن قرار داد . اولين پارامتر از نوع Object و با نام Sender و دومين پارامتر از نوع EventArgs و با نام E ، می باشد . پارامترهای فوق برای هر نوع رويداد سمت سرويس دهنده ، ارسال می گردند . در صورت عدم معرفی و مشخص نمودن پارامترهای فوق در موارديکه از کنترل های سمت سرويس دهنده استفاده می شود ، با يک پيام خطاء مواجه خواهيم شد. نقش پارامترهای فوق بسيار حائز اهميت می باشد ، چراکه آنان اطلاعات لازم در خصوص کنترلی را که باعث باعث بروز رويداد شده است را در اختيار ASP.NET قرار می دهند .

در بخش سوم اين مقاله به بررسی فرآيند PostBack خواهيم پرداخت .



جستجو

مقالات                 
دايره المعارف       
دوره های آموزشی


 

 

مشاهده گروه ها



              

 

 تهيه شده در شرکت سخا روش -  1382