بررسی مدل رويدادها در فرم های وب New Page 1



ساير




 

 

 

SAKHA RAVESH CO.

 ا مروز

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

    5 4 3 2 1 

 عنوان

 نويسنده

  مشاهده

 تعداد آراء

 امتياز

 فرم های وب ( بخش سوم )

 مديريت وب

13621

62

5

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

 

فرم های وب

فرم های وب ( بخش سوم )

آنچه تاکنون گفته شده است :
بخش اول :
مفاهيم اوليه فرم های وب
بخش دوم :
بررسی معماری فرم های وب
در اين بخش ، به بررسی مدل رويدادها در فرم های وب خواهيم پرداخت .

از ديدگاه برنامه نويسان ، مدل رويداد ها در فرم های وب ، شباهت زيادی با  مدل رويدادها در فرم های ويندوز دارد .  شباهت فوق ، تسهيل در برنامه نويسی فرم های وب را بدنبال خواهد داشت ( شناخت زمينه ها و مفاهيم اوليه بمنظور کار با يک مفهوم جديد). عليرغم شباهت موجود بين فرم های وب و ويندوز، ما شاهد برخی تفاوت ها در رابطه با مدل رويدادها در فرم های وب نسبت به فرم های ويندوز می باشيم . مهمترين تفاوت  در اين زمينه به محل بروز رويداد و محل سرويس دهی به رويداد برمی گردد. رويدادها بر روی سرويس گيرنده محقق شده و و پردازش آنها ( نحوه رفتار با يک رويداد ) بر روی سرويس دهنده انجام خواهد شد . در مثالی که در دو بخش قبلی مقاله ارائه گرديد ، از يک TextBox و يک دکمه Button استفاده شده که برای بررسی فراگير و همه جانبه رويدادها در فرم های وب کافی نبوده و لازم است امکانات بيشتری را بر روی فرم وب ، مستقر نمائيم . بدين دليل از امکانات بيشتری نظير: چندين Textbox ,Listbox,checkbox و Button بيشتر بر روی فرم وب استفاده خواهد شد . با توجه به اينکه Round Trip ( ارسال درخواست از سرويس گيرنده برای سرويس دهنده و ارائه پاسخ از سرويس دهنده برای سرويس گيرنده ) بين سرويس دهنده گران تمام می شود ( نسبت استفاده از منابع موجود در واحد زمان )، رويدادها بصورت اتوماتيک باعث يک Postback به سرويس دهنده نخواهند شد . کنترل های سرويس دهنده دارای مجموعه ای از رويدادهای ذاتی بوده که يک Postback  اتوماتيک  به سرويس دهنده را باعث می گردند.
متداولترين رويداد ذاتی ، کليک نمودن بر روی يک
Button است . ساير رويدادها نظير : انتخاب يک آيتم در يک listbox ، باعث يک Postback فوری به سرويس دهنده نخواهند شد. در مقابل، اين نوع از رويدادها Cache شده  و بدنبال محقق شدن رويداد مربوطه (کليک بر روی دکمه Button )، يک Postback به سرويس دهنده انجام خواهد شد . در ادامه بر روی سرويس دهنده ، رويدادهای متفاوت پردازش ( بدون اولويت خاصی ) و در نهايت رويداد کليک Button که باعث Postback شده است ، پردازش خواهد شد .

پردازش صفحه 
پردازش يک صفحه ماحصل اتحاد و همکاری بين سرويس دهنده وب ،
ASP.NET Runtime و کد نوشته شده توسط برنامه نويسان است . کلاس Page ، تعداد زيادی از رويدادها را ارائه که از آنان بمنظور انجام پردازش های مرتبط با صفحه ، استفاده می گردد . کلاس فوق ، همچنين دارای خصلت ها و متدهائی می باشد که می توان از آنان با توجه به جايگاه و رسالت مربوطه ، استفاده کرد . در ادامه به بررسی برخی از امکانات مهم در اين خصوص خواهيم پرداخت .

رويدادهای صفحه
در زمان پردازش يک صفحه بر روی سرويس دهنده ، تعدادی از رويدادها محقق خواهند شد. اين رويدادها در کلاس پايه
Control ، تعريف شده  و بنابراين برای کنترل های سرويس دهنده قابل دستيابی خواهند بود . مهمترين اين رويدادها بشرح زير می باشند :

  • Init . اولين مرحله از چرخه حيات يک صفحه بوده و زمانی محقق می گردد که صفحه مقداردهی اوليه می گردد .در اين مقطع هيچگونه اطلاعاتی در رابطه با View State ، مربوط به کنترل ها وجود نخواهد داشت .
  •  Load . رويداد فوق زمانی محقق می گردد که کنترل ها درون صفحه لود شده باشند . در اين مقطع ،اطلاعات مربوط به View state  مرتبط با کنترل ها در دسترس خواهد بود.
  • PreRender . رويداد فوق ، صرفا"  قبل از اينکه کنترل ها برای خروجی  Rendered گردند ، محقق می گردد.اين رويداد عموما" توسط يک صفحه handle نمی گردد اما برای پياده سازی کنترل ها ی سرويس دهنده اختصاصی ، حائز اهميت می باشند.

  • Unload . رويداد فوق ، زمانی محقق می گردد که کنترل ها از صفحه Unload می گردند. در اين مقطع  امکان ارسال داده های مورد نظر برای خروجی ، وجود نخواهد داشت .

خصلت های صفحه 
کلاس
Page ، دارای تعدادی خصلت  مهم بوده  که در ادامه به برخی از آنها اشاره می گردد :

  • EnableViewState . خصلت فوق ، وضعيت View State را در رابطه با صفحه مورد نظر مشخص می نمايد.مقدار خصلت فوق را می توان اخذ و متناسب با سياست مربوطه آن را تنظيم نمود. مقدار پيش فرض True بوده و بمنزله حمايت و نگهداری View State است .
  •  ErrorPage . خصلت فوق ، نشاندهنده صفحه ای است که در صورت بروز خطاء در صفحه مورد نظر ، مرورگر به آن تغيير مسير خواهد داد . استفاده از خصلت فوق برای برخورد با  خطا های  غير قابل پيش بينی استفاده می گردد.
  • IsPostBack . خصلت فوق ، نشاندهنده اين موضوع  است که آيا صفحه در پاسخ به يک Postback به سرويس گيرنده ، فعال شده است  و يا برای اولين مرتبه است که فعال  می گردد .
  •  IsValid . خصلت فوق ، موفقيت و يا عدم موفقيت فرآيند معتبر سازی  در ارتباط با صفحه را مشخص می نمايد.
  • Request  . خصلت فوق ، شی  HTTP Request  را دريافت و امکان دستيابی به داده وارده از HTTP Request را فراهم می نمايد.
  • Response . خصلت فوق ، شی  HTTP Response  را دريافت و امکان ارسال داده برای  يک مرورگر را فراهم می نمايد.
  • Session . خصلت فوق ، شی Session جاری را که توسط ASP.NET برای ذخيره Session State درنظر گرفته  شده است ، ارائه می نمايد.
  • Trace . خصلت فوق ،  شی TraceContext در ارتباط با صفحه  را ارائه که می توان از آن بمنظور نمايش اطلاعات tracing استفاده کرد.

برنامه نمونه 
در اين بخش به بررسی
يک فرم وب نمونه  بمنظور آشنائی با ويژگی ها و نحوه پردازش صفحه خواهيم پرداخت.صفحه Hellopage.aspx ، در رابطه با رويدادهای صفحه ، روتين های مربوطه را ارائه می نمايد. برای ارسال اطلاعات در خروجی از Response استفاده شده است . برای هر رويداد ، محتويات متن در کنترل های سرويس دهنده txtName و lblGreeting نمايش داده می شود . در روتين مربوط به رويداد Load ، مقدار جاری IsPostBack که می بايست در مرتبه اولی که به صفحه دستيابی می شود(False ) ، نمايش داده می شود ( در ادامه دستيابی به صفحه مقدار خصلت فوق ، True خواهد شد). 

يک فرم وب نمونه بهمراه روتين های  مربوطه

<!-- HelloPage.aspx -->
<%@ Page Language="VB" Debug="true" %>
<HTML >
<HEAD>
<SCRIPT RUNAT="SERVER">
Sub cmdEcho_Click (Source As Object, e As EventArgs)
   lblGreeting.Text="Hello, " & txtName.Text
End Sub
Sub Page_Init (sender As Object, E As EventArgs)
   Response.Write("<B>" & "Page_Init<br>" & "</B>")
   Response.Write("txtName = " & txtName.Text & "<br>")
   Response.Write("lblGreeting = " & lblGreeting.Text & "<br>")
End Sub
Sub Page_Load (sender As Object, E As EventArgs)
   Response.Write("<B>"& "Page_Load<br>" & "</B>")
   Response.Write("IsPostBack = " & IsPostBack & "<br>")
   Response.Write("txtName = " & txtName.Text & "<br>")
   Response.Write("lblGreeting = " & lblGreeting.Text & "<br>")
End Sub
Sub Page_PreRender (sender As Object, E As EventArgs)
    Response.Write("<B>"& "Page_PreRender<br>" & "</B>")
    Response.Write("txtName = " & txtName.Text & "<br>")
    Response.Write("lblGreeting = " & lblGreeting.Text &  "<br>")
End Sub
</SCRIPT>
</HEAD>
<BODY>
<FORM RUNAT="SERVER">Your name:&nbsp;
<asp:textbox id=txtName Runat="server"></asp:textbox>
<p><asp:button id=cmdEcho onclick=cmdEcho_Click Text="Echo"
       runat="server" tooltip="بر روی دکمه کليک تا نام شما نمايش داده شود">
</asp:button></p>
<asp:label id=lblGreeting runat="server"></asp:label>
<P></P>
</FORM>
</BODY>
</HTML>

زمانيکه صفحه برای اولين مرتبه نمايش داده می شود ،محتويات TextBox و Lable خالی است (هنوز داده ئی وارد نشده است) . در چنين حالتی خصلت  IsPostBack دارای مقدار False است . در ادامه يک نام را وارد و دکمه Echo را فعال می نمائيم . در چنين حالتی خروجی زير را با توجه به عملکرد هر يک از روتين های  مرتبط با رويدادهای صفحه خواهيم داشت .

Page_Init
txtName =
lblGreeting =
Page_Load
IsPostBack = True
txtName = Srco.ir
lblGreeting =
Page_PreRender
txtName = Srco.ir
lblGreeting = Hello, Srco.ir

توضيحات برنامه

  • در Page-Init ، اطلاعاتی در رابطه با کنترل ها وجود ندارد . View State ، برای مقدار دهی اوليه صفحه در دسترس نخواهد بود .
  • در Page-Load ، فيلد  TextBox ، دارای داده بوده ولی Label داده ئی را ندارد(هندلر مربوط به Click Event ، هنوز فعال نشده است) . در اين مقطع IsPostBack ، دارای مقدار True است .
  • در Pre-Render ، دو کنترل دارای داده می باشند .
  • در صورتيکه دکمه Echo ، برای مرتبه دوم کليک گردد ، مجددا" کنترل ها در بخش Page-init ، دارای داده ئی نخواهند بود. در اين زمان در Page Load ، امکان  View State ، داده مورد نياز برای دو کنترل را ارائه می نمايد . شکل زير خروجی برنامه را پس از فشردن مرتبه دوم دکمه Echo ، نشان می دهد .

Page Directive
يک فايل
aspx . ، ممکن است شامل يک Page Directive ، بمنظور تعريف خصلت های متفاوت  بمنظور کنترل نحوه  پردازش صفحه توسط ASP.NET ، باشد  . يک Page Directive ، دارای يک و يا چندين زوج Attribute/Value است( بشکل :  Attribute = Value ). گرامر Page Directive ، بصورت زير است :

<@ Page ....@>

مثال :  صفحه HelloCodeBehind.aspx ( بخش ويژوال فرم وب ) ، يک صفحه aspx . بوده که در آن هيچگونه کدی استفاده نشده است . فايل Code Behind مربوطه ( HelloCodeBehind.aspx.vb ) ، که شامل کدهای لازم است  توسط خصلت SRC مشخص می گردد :

<!-- HelloCodebehind.aspx -->
<%@ Page Language="VB" Src="HelloCodebehind.aspx.vb" Inherits= MyWebPage %>
<HTML dir="rtl" >
<HEAD>

   ...

  • خصلت SRC ، فايل Code Behind را مشخص می نمايد .
  • خصلت Language ، زبان استفاده شده برای صفحه را مشخص می نمايد.کد نوشته شده توسط زبان معرفی شده ، می تواند يک فايل Code Behind و يا  يک بلاک SCRIPT  همرا ه در فايل باشد . مقدار مورد نظر برای خصلت فوق ، می تواند هر يک از زبانهای حمايت شده در دات نت باشد ( # C و يا VB.NET ) .
  • Inherits ، دايرکتيو فوق Page Class ئی را که صفحه aspx.  ازآن به ارث خواهد رسيد ،  مشخص می نمايد .
  • خصلت Debug ، نحوه ترجمه صفحه را مشخص می نمايد ( همراه با اطلاعات debug و يا بدون اطلاعات debug ) . در صورتيکه مقدار خصلت فوق ،  True باشد ، اطلاعات مربوط به debug  فعال و مرورگر قادر به ارائه جزئيات لازم در رابطه با با خطاهای ترجمه است . مقدار پيش فرض خصلت فوق ،  False است .
  •  خصلتErrorPage  ، يک URL مقصد را مشخص تا در موارديکه يک خطاء غير قابل پيش بينی بر روی صفحه مورد نظر بوجود می آيد ، مرورگر از آن استفاده و مسير خود را بر اساس آدرس مربوطه مشخص نمايد ( تغيير مسير ) .
  • خصلتTrace  ، نشاندهنده وضعيت رديابی است . در صورتيکه مقدارخصلت فوق  True ، امکان رديابی فعال خواهد بود . مقدار پيش فرض False است .

Tracing 
تکنولوژی
ASP.NET ، امکانات گسترده ای را در ارتباط با  رديابی ارائه می نمايد . بدين منظور لازم است مقدار خصلت Trace ، بدرستی تنظيم گردد(مقدار True ) . بدين ترتيب امکان ارسال اطلاعات مربوط به رديابی برای مرورگر ، فراهم می گردد.در اين راستا همچنين می توان  با استفاده از متد write مربوط به  شی TraceContext ( از خصلت Trace مربوطه به page
اقتباس شده است) ،  اطلاعات مربوط به  رديابی اختصاصی خود را نيز نمايش داد .
مثال : HelloTrace.aspx ، نحوه استفاده از tracing را در مقابل استفاده از شی Request  ، نشان می دهد .

نمايش اطلاعات Tracing

<!-- HelloTrace.aspx -->
<%@ Page Language="VB" Debug="true"  Trace = "true" %>
<HTML >
<HEAD>
<SCRIPT RUNAT="SERVER">
Sub cmdEcho_Click(Source As Object, e As EventArgs)
   lblGreeting.Text="Hello, " & txtName.Text
End Sub
Sub Page_Init(sender As Object, E As EventArgs)
Trace.Write("Page_Init<br>")
Trace.Write("txtName = " & txtName.Text & "<br>")
Trace.Write("lblGreeting = " & lblGreeting.Text _
& "<br>")
End Sub
...

شکل زير ، خروجی مرورگر را پس از اولين درخواست در ارتباط با صفحه نشان می دهد( خروجی Tracing پس از فرم نمايش داده می شود ) .

در بخش چهارم اين مقاله به بررسی معماری کنترل سرويس دهنده و برنامه نويسی Request/Response خواهيم پرداخت .



جستجو

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


 

 

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



              

 

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